#python #django #django-migrations #django-filer
#python #django #django-миграции #django-filer
Вопрос:
В настоящее время у меня есть модель для многоразовых изображений:
class Image(models.Model):
class Meta:
verbose_name = _('Image')
verbose_name_plural = _('Images')
name = models.CharField(
max_length=200,
unique=False,
blank=False,
null=False,
verbose_name=_('Image name')
)
full_size = ProcessedImageField(
upload_to='images/',
processors=[ResizeToFit(height=450, upscale=False)],
format='JPEG',
options={'quality': 90},
)
thumbnail = ImageSpecField(
source='full_size',
processors=[Thumbnail(width=200, height=115, crop=True, upscale=False)],
format='JPEG',
options={'quality': 60}
)
def __str__(self):
return self.name
Теперь я пытаюсь перейти к FilerImageField
from django-filer
.
Я добавил поле с другим именем, вот соответствующий раздел кода:
image = models.ForeignKey(
Image,
on_delete=models.SET_NULL,
verbose_name=_('Unit image'),
null=True,
blank=True
)
img = FilerImageField(
null=True,
blank=True,
related_name="unit_img",
verbose_name=_('Unit image'),
on_delete=models.DO_NOTHING,
)
У меня следующая миграция:
# Generated by Django 3.1.2 on 2020-11-02 20:09
from django.db import migrations
from filer.models import Image
def migrate_unit_images(apps, schema_editor):
Units = apps.get_model('tageler', 'Unit')
for unit in Units.objects.all():
if unit.image:
img, created = Image.objects.get_or_create(
file=unit.image.full_size.file,
defaults={
'name': unit.name,
'description': unit.image.name,
}
)
unit.img = img
unit.save()
class Migration(migrations.Migration):
dependencies = [
('tageler', '0008_filer_create'),
]
operations = [
migrations.RunPython(migrate_unit_images),
]
Моя проблема в том, что я получаю следующую ошибку:
ValueError: Cannot assign "<Image: This is a test image>": "Unit.img" must be a "Image" instance.
Я думал, что я только что создал или получил изображение. Чего мне здесь не хватает? Почему мой недавно созданный образ не является экземпляром «Image»?