From 897df11f2166547cba233785872fed6065f20f83 Mon Sep 17 00:00:00 2001 From: Maciej Skorczewski <38064877+smaciejs@users.noreply.github.com> Date: Mon, 19 Nov 2018 15:21:33 +0100 Subject: [PATCH] Add image field and image tag into trade marks app model (#3336) --- requirements/base.txt | 4 ++- src/ralph/trade_marks/admin.py | 5 ++-- .../migrations/0003_trademark_image.py | 20 +++++++++++++ src/ralph/trade_marks/models.py | 28 +++++++++++++++++++ 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 src/ralph/trade_marks/migrations/0003_trademark_image.py diff --git a/requirements/base.txt b/requirements/base.txt index 65c1c0fd22..08a48bca3a 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -31,4 +31,6 @@ tablib==0.11.5 factory-boy==2.11.1 Faker==0.9.0 openpyxl==2.4.0 -typing==3.6.6 \ No newline at end of file +typing==3.6.6 +Pillow==5.3.0 + diff --git a/src/ralph/trade_marks/admin.py b/src/ralph/trade_marks/admin.py index 6eafff3093..27372aaa4b 100644 --- a/src/ralph/trade_marks/admin.py +++ b/src/ralph/trade_marks/admin.py @@ -42,7 +42,7 @@ class TradeMarkAdmin(AttachmentsMixin, RalphAdmin): ] list_display = [ 'id', 'name', 'registrant_number', 'type', - 'valid_to', 'holder', 'status' + 'valid_to', 'holder', 'status', 'image_tag' ] raw_id_fields = [ 'business_owner', 'technical_owner', 'holder' @@ -50,7 +50,7 @@ class TradeMarkAdmin(AttachmentsMixin, RalphAdmin): fieldsets = ( (_('Basic info'), { 'fields': ( - 'name', 'registrant_number', 'type', + 'name', 'registrant_number', 'type', 'image', 'image_tag', 'registrant_class', 'valid_to', 'region', 'order_number_url', 'additional_markings', 'holder', 'status', 'remarks' @@ -63,6 +63,7 @@ class TradeMarkAdmin(AttachmentsMixin, RalphAdmin): }) ) search_fields = ['name', 'id', ] + readonly_fields = ['image_tag'] @register(ProviderAdditionalMarking) diff --git a/src/ralph/trade_marks/migrations/0003_trademark_image.py b/src/ralph/trade_marks/migrations/0003_trademark_image.py new file mode 100644 index 0000000000..cea1b901fe --- /dev/null +++ b/src/ralph/trade_marks/migrations/0003_trademark_image.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import ralph.trade_marks.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('trade_marks', '0002_auto_20181005_1446'), + ] + + operations = [ + migrations.AddField( + model_name='trademark', + name='image', + field=models.ImageField(null=True, upload_to=ralph.trade_marks.models.upload_dir, blank=True), + ), + ] diff --git a/src/ralph/trade_marks/models.py b/src/ralph/trade_marks/models.py index ec14893162..2961118c93 100644 --- a/src/ralph/trade_marks/models.py +++ b/src/ralph/trade_marks/models.py @@ -2,10 +2,12 @@ from dj.choices import Choices from django.conf import settings from django.db import models +from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from ralph.accounts.models import Regionalizable from ralph.assets.models import AssetHolder, BaseObject +from ralph.attachments.helpers import get_file_path from ralph.domains.models import Domain from ralph.lib.mixins.models import ( AdminAbsoluteUrlMixin, @@ -14,6 +16,12 @@ ) +def upload_dir(filename, instance): + return get_file_path( + filename, instance, default_dir="trade_marks" + ) + + class TradeMarkType(Choices): _ = Choices.Choice word = _('Word') @@ -63,6 +71,11 @@ class TradeMark(Regionalizable, AdminAbsoluteUrlMixin, BaseObject): choices=TradeMarkType(), default=TradeMarkType.figurative.id ) + image = models.ImageField( + null=True, + blank=True, + upload_to=upload_dir + ) registrant_class = models.CharField( verbose_name=_('Registrant class'), blank=False, @@ -106,6 +119,21 @@ class TradeMark(Regionalizable, AdminAbsoluteUrlMixin, BaseObject): through='TradeMarksLinkedDomains', ) + def __str__(self): + return '{}, {}, {} expires {}.'.format( + self.name, self.registrant_number, + self.registrant_class, self.valid_to + ) + + def image_tag(self): + if not self.image: + return "" + return mark_safe( + '' % self.image.url + ) + image_tag.short_description = _('Image') + image_tag.allow_tags = True + class TradeMarksLinkedDomains(models.Model): trade_mark = models.ForeignKey(TradeMark)