对图片模型进行定制

Image模型可被定制,从而实现将额外字段添加到图片。

为了实现这个目的,需将以下两个模型添加到项目中:

  • wagtail.images.models.AbstractImage继承的图片模型本身。这就是要将额外字段进行添加的地方。
  • wagtail.images.models.AbstractRendition继承的转写模型。这用于存储新模型的转写。

以下是一个示例:

  1. # models.py
  2. from django.db import models
  3. from wagtail.images.models import Image, AbstractImage, AdstractRendition
  4. class CustomImage(AbstractImage):
  5. # 在这里将所有额外字段添加到图片
  6. # 比如,要添加一个说明字段:
  7. # caption = models.CharField(max_length=255, blank=True)
  8. admin_form_fields = Image.admin_form_fields + (
  9. # 随后在这里添加字段名称,以令到其出现在表单中:
  10. 'caption',
  11. )
  12. class CustomRendition(AbstractRendition):
  13. image = models.ForeignKey(CustomImage, on_delete=models.CASACDE, related_name='renditions')
  14. class Meta:
  15. unique_together = (
  16. ('image', 'filter_spec', 'focal_point_key'),
  17. )

注意 在某个定制图片模型上定义的字段,必须要么设置为非要求的(blank=True),要么指定一个默认值 — 这是因为图片的上传与定制数据的输入,是两个独立发生的事情,同时Wagtail需要能够在上传时立即创建出一条图片记录。

之后要将WAGTAILIMAGES_IMAGE_MODEL设置为指向该定制图片模型:

  1. WAGTAILIMAGES_IMAGE_MODEL = 'images.CustomImage'

从内建图片模型进行迁移

Migrating from the builtin image model

在将某个既有站点更改为使用某种定制图片模型时,图片不会自动拷贝到新的模型。需要使用一个数据迁移,来将原有图片拷贝到新的模型。

所有参考内建图片模型的模板,仍将之前那样继续工作,但要对其进行更新,才能观看到新的图片。

对定制图片模型的引用

wagtail.images.get_image_model()

WAGTAILIMAGES_IMAGE_MODEL设置取得图片模型。此方法对于那些制作Wagtail插件、需要图片模型的开发者有用。在没有定义定制模型时,默认为标准的Image模型。

获取图片模型的字符串形式的、带点的app.Model名称。对于制作Wagtail插件、需要对图片模型进行引用,比如在外键中,但又不需要模型本身的开发者有用。