使用wagtail 2.1,django 2.0.3,python 3.6.4
我有以下(简化的)自定义图像模型,它们通过m2m关系链接到PhotoType
和PhotoPlate
:
from wagtail.images.models import AbstractImage
from modelcluster.fields import ParentalManyToManyField
from modelcluster.models import ClusterableModel
class PhotoType(models.Model):
title = models.CharField(verbose_name='Title', max_length=255, blank=False, null=False, default=None)
class PhotoPlate(models.Model):
plate= models.CharField(verbose_name='Title', max_length=255, blank=False, null=False, default=None)
class Photo(AbstractImage):
type = ParentalManyToManyField(PhotoType, help_text="Several are allowed.", blank=True)
plate = ParentalManyToManyField(PhotoPlate, help_text="Several are allowed.", blank=True)
class Meta:
verbose_name = 'Photo'
verbose_name_plural = 'Photos'
PhotoType
和PhotoPlate
模型是通过本地modeladmin_register(PhotoTypeModelAdmin)
文件中的modeladmin_register(PhotoPlateModelAdmin)
和wagtail_hooks.py
引用的。
遵循documentation后,一切正常。
除了一件事:在为两个字段type
和plate
呈现的多项选择下拉列表中,无论选择了多少项,都永远不会保存对应的m2m关系。
我找到了几个answers,但是可以通过玩Photo类的继承来使其工作,例如:class CCAPhoto(ClusterableModel, AbstractImage)
。
是否可以将ParentalManyToManyField
添加到自定义图像模型中?如果是这样,我想念什么?
编辑: 手动将关系添加到数据库时,正确的项目会正确显示在wagtail管理表单上--即在初始加载时预先选择。
答案 0 :(得分:3)
您应该在此处使用普通的ParentalManyToManyField
,而不是使用ManyToManyField
:
class Photo(AbstractImage):
type = models.ManyToManyField(PhotoType, help_text="Several are allowed.", blank=True)
plate = models.ManyToManyField(PhotoPlate, help_text="Several are allowed.", blank=True)
ParentalManyToManyField
和ParentalKey
字段类型设计用于Wagtail的页面编辑器(以及相关的片段,如代码片段),在其中,多个模型需要一起作为一个单元进行预览和版本控制。跟踪。 Wagtail的图像和文档模型不使用此模型-它们由通过普通Django ModelForm编辑的单个模型组成,因此ParentalManyToManyField
和ParentalKey
是不必要的。