我目前有一个可重用图像的模型:
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.
我以为我刚刚创建或获取了图像。我在这里想念什么?为什么我新创建的图像不是“图像”实例?