Skip to content

Commit

Permalink
django-cms#494 merge with master
Browse files Browse the repository at this point in the history
  • Loading branch information
execut committed Jan 30, 2021
1 parent ab1cd0b commit e215852
Show file tree
Hide file tree
Showing 7 changed files with 141 additions and 13 deletions.
3 changes: 2 additions & 1 deletion filer/admin/fileadmin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from ..models import File
from .permissions import PrimitivePermissionAwareModelAdmin
from .tools import AdminContext, admin_url_params_encoded, popup_status
from parler.admin import TranslatableAdmin


class FileAdminChangeFrom(forms.ModelForm):
Expand All @@ -17,7 +18,7 @@ class Meta:
exclude = ()


class FileAdmin(PrimitivePermissionAwareModelAdmin):
class FileAdmin(PrimitivePermissionAwareModelAdmin, TranslatableAdmin):
list_display = ('label',)
list_per_page = 10
search_fields = ['name', 'original_filename', 'sha1', 'description']
Expand Down
42 changes: 42 additions & 0 deletions filer/migrations/0013_add_translations_fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('filer', '0012_file_mime_type'),
]

operations = [
migrations.CreateModel(
name='FileTranslation',
fields=[
('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
('language_code', models.CharField(verbose_name='Language', choices=[('lt', 'Lithuanian'), ('en', 'English')], max_length=15, db_index=True)),
('name', models.CharField(verbose_name='name', blank=True, default='', max_length=255)),
('description', models.TextField(verbose_name='description', null=True, blank=True)),
('master', models.ForeignKey(null=True, related_name='translations', editable=False, to='filer.File', on_delete=models.CASCADE)),
],
options={
'verbose_name': 'file Translation',
'default_permissions': (),
'db_table': 'filer_file_translation',
},
bases=(models.Model,),
),
migrations.AlterUniqueTogether(
name='filetranslation',
unique_together={('language_code', 'master')},
),
migrations.RemoveField(
model_name='file',
name='description',
),
migrations.RemoveField(
model_name='file',
name='name',
),
]
63 changes: 63 additions & 0 deletions filer/migrations/0014_auto_20210130_1530.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Generated by Django 3.0.11 on 2021-01-30 12:30

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import parler.fields
import parler.models


class Migration(migrations.Migration):

dependencies = [
('filer', '0013_add_translations_fields'),
]

operations = [
migrations.AlterModelOptions(
name='filetranslation',
options={'default_permissions': (), 'managed': True, 'verbose_name': 'file Translation'},
),
migrations.RemoveField(
model_name='image',
name='author',
),
migrations.RemoveField(
model_name='image',
name='default_alt_text',
),
migrations.RemoveField(
model_name='image',
name='default_caption',
),
migrations.AlterField(
model_name='filetranslation',
name='language_code',
field=models.CharField(db_index=True, max_length=15, verbose_name='Language'),
),
migrations.AlterField(
model_name='filetranslation',
name='master',
field=parler.fields.TranslationsForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='filer.File'),
),
migrations.CreateModel(
name='ImageTranslation',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')),
('default_alt_text', models.CharField(blank=True, max_length=255, null=True, verbose_name='default alt text')),
('default_caption', models.CharField(blank=True, max_length=255, null=True, verbose_name='default caption')),
('author', models.CharField(blank=True, max_length=255, null=True, verbose_name='author')),
('master', parler.fields.TranslationsForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations2', to=settings.FILER_IMAGE_MODEL)),
],
options={
'verbose_name': 'image Translation',
'db_table': 'filer_image_translation',
'db_tablespace': '',
'managed': True,
'default_permissions': (),
'unique_together': {('language_code', 'master')},
},
bases=(parler.models.TranslatableModel,),
),
]
18 changes: 11 additions & 7 deletions filer/models/abstract.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@


logger = logging.getLogger(__name__)

from parler.fields import TranslatedField
from parler.models import TranslationDoesNotExist

class BaseImage(File):
SIDEBAR_IMAGE_WIDTH = 210
Expand All @@ -29,8 +30,8 @@ class BaseImage(File):
_height = models.IntegerField(null=True, blank=True)
_width = models.IntegerField(null=True, blank=True)

default_alt_text = models.CharField(_('default alt text'), max_length=255, blank=True, null=True)
default_caption = models.CharField(_('default caption'), max_length=255, blank=True, null=True)
# default_alt_text = TranslatedField()
#default_caption = TranslatedField()

subject_location = models.CharField(_('subject location'), max_length=64, blank=True,
default='')
Expand Down Expand Up @@ -119,10 +120,13 @@ def has_generic_permission(self, request, permission_type):

@property
def label(self):
if self.name in ['', None]:
return self.original_filename or 'unnamed file'
else:
return self.name
try:
if self.name in ['', None]:
return self.original_filename or 'unnamed file'
else:
return self.name
except TranslationDoesNotExist:
return 'unnamed file'

@property
def width(self):
Expand Down
20 changes: 16 additions & 4 deletions filer/models/filemodels.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,22 @@

from polymorphic.managers import PolymorphicManager
from polymorphic.models import PolymorphicModel
from polymorphic.query import PolymorphicQuerySet

from .. import settings as filer_settings
from ..fields.multistorage_file import MultiStorageFileField
from . import mixins
from .foldermodels import Folder
from parler.managers import TranslatableManager, TranslatableQuerySet
from parler.models import TranslatableModel, TranslatedFields


class FileManager(PolymorphicManager):
class FileQuerySet(TranslatableQuerySet, PolymorphicQuerySet):
pass


class FileManager(PolymorphicManager, TranslatableManager):
queryset_class = FileQuerySet
def find_all_duplicates(self):
r = {}
for file_obj in self.all():
Expand All @@ -46,7 +54,7 @@ def mimetype_validator(value):
raise ValidationError(msg.format(mimetype=value))


class File(PolymorphicModel, mixins.IconsMixin):
class File(TranslatableModel, PolymorphicModel, mixins.IconsMixin):
file_type = 'File'
_icon = "file"
_file_data_changed_hint = None
Expand All @@ -67,8 +75,12 @@ class File(PolymorphicModel, mixins.IconsMixin):
has_all_mandatory_data = models.BooleanField(_('has all mandatory data'), default=False, editable=False)

original_filename = models.CharField(_('original filename'), max_length=255, blank=True, null=True)
name = models.CharField(max_length=255, default="", blank=True, verbose_name=_('name'))
description = models.TextField(null=True, blank=True, verbose_name=_('description'))
translations = TranslatedFields(
name = models.CharField(max_length=255, default="", blank=True,
verbose_name=_('name')),
description = models.TextField(null=True, blank=True,
verbose_name=_('description'))
)

owner = models.ForeignKey(
getattr(settings, 'AUTH_USER_MODEL', 'auth.User'),
Expand Down
7 changes: 6 additions & 1 deletion filer/models/imagemodels.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from django.utils.translation import gettext_lazy as _

from .abstract import BaseImage
from parler.models import TranslatedFields


logger = logging.getLogger("filer")
Expand All @@ -16,7 +17,11 @@
class Image(BaseImage):
date_taken = models.DateTimeField(_('date taken'), null=True, blank=True,
editable=False)
author = models.CharField(_('author'), max_length=255, null=True, blank=True)
translations2 = TranslatedFields(
default_alt_text=models.CharField(_('default alt text'), max_length=255, blank=True, null=True),
default_caption=models.CharField(_('default caption'), max_length=255, blank=True, null=True),
author=models.CharField(_('author'), max_length=255, null=True, blank=True)
)
must_always_publish_author_credit = models.BooleanField(_('must always publish author credit'), default=False)
must_always_publish_copyright = models.BooleanField(_('must always publish copyright'), default=False)

Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
'django-polymorphic>=2,<3.1',
'easy-thumbnails>=2,<3.0',
'Unidecode>=0.04,<1.2',
'django-parler>=1.2.1',
]


Expand Down

0 comments on commit e215852

Please sign in to comment.