首页 > 解决方案 > django 从 ProcessedImageField 迁移到 FilerImageField 失败

问题描述

我目前有一个可重用图像的模型:

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

现在我正试图转移到FilerImageFieldfrom 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.

我以为我刚刚创建或获取了图像。我在这里想念什么?为什么我新创建的图像不是“图像”实例?

标签: pythondjangodjango-migrationsdjango-filer

解决方案


推荐阅读