[英]metaclass conflict with modelformset_factory in Django
I'm using Django model inheritance to create two models - WorkAttachmentPicture
and WorkAttachmentAudio
我正在使用Django模型继承来创建两个模型 -
WorkAttachmentPicture
和WorkAttachmentAudio
class WorkAttachment(models.Model):
""" Abstract class that holds all fields that are required in each attachment """
work = models.ForeignKey(Work)
added = models.DateTimeField(default=datetime.datetime.now)
views = models.IntegerField(default=0)
class Meta:
abstract = True
class WorkAttachmentFileBased(WorkAttachment):
""" Another base class, but for file based attachments """
description = models.CharField(max_length=500, blank=True)
size = models.IntegerField(verbose_name=_('size in bytes'))
class Meta:
abstract = True
class WorkAttachmentPicture(WorkAttachmentFileBased):
""" Picture attached to work """
image = models.ImageField(upload_to='works/images', width_field='width', height_field='height')
width = models.IntegerField()
height = models.IntegerField()
class WorkAttachmentAudio(WorkAttachmentFileBased):
""" Audio file attached to work """
file = models.FileField(upload_to='works/audio')
One work can have a multiple audio and video attachments, so I'm using a modelformset_factory to create the forms: 一个工作可以有多个音频和视频附件,所以我使用modelformset_factory来创建表单:
class ImageAttachmentForm(forms.ModelForm):
""" Image attached to work """
image = forms.FileField(
label=_('File'),
help_text=_('JPEG, GIF or PNG image.')
)
description = forms.CharField(
widget=forms.Textarea(),
label=_('File description'),
help_text=_('Max. 500 symbols.'),
max_length=500
)
class Meta:
model = WorkAttachmentPicture
fields = ['image', 'description']
ImageAttachmentFormSet = modelformset_factory(WorkAttachmentPicture, form=ImageAttachmentForm)
class AudioAttachmentForm(forms.Form):
""" Audio file attached to work """
file = forms.FileField(
label=_('File'),
help_text=_('MP3 file.')
)
description = forms.CharField(
widget=forms.Textarea(),
label=_('File description'),
help_text=_('Max. 500 symbols.'),
max_length=500
)
class Meta:
model = WorkAttachmentAudio
fields = ['file', 'description']
AudioAttachmentFormSet = modelformset_factory(WorkAttachmentAudio, form=AudioAttachmentForm)
Everything seems correct to me, but at the project startup I get the error: 一切似乎对我来说都是正确的,但在项目启动时我得到错误:
metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
If I create only one formset ( ImageAttachmentFormSet
, for example) everything is ok. 如果我只创建一个formset(例如
ImageAttachmentFormSet
),一切都可以。 But when I'm adding another one, error appears. 但是当我添加另一个时,会出现错误。 How do I solve this, to use modelformsets with inherited models?
如何解决这个问题,将模型集与继承模型一起使用?
Solved it. 解决了它。 If you look carefully
如果你仔细看
# this has forms.ModelForm
class ImageAttachmentForm(forms.ModelForm):
# this has forms.Form
class AudioAttachmentForm(forms.Form):
I've changed forms.Form
to forms.ModelForm
and everything works now - this was a simple copy/paste error. 我已经改变了
forms.Form
到forms.ModelForm
,现在一切正常 - 这是一个简单的复制/粘贴错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.