gpt4 book ai didi

python - 元类与 Django 中的 modelformset_factory 冲突

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:28 25 4
gpt4 key购买 nike

我正在使用 Django 模型继承来创建两个模型 - WorkAttachmentPictureWorkAttachmentAudio

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')

一个作品可以有多个音频和视频附件,所以我使用了 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)

对我来说一切似乎都是正确的,但在项目启动时我得到了错误:

metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

如果我只创建一个表单集(例如,ImageAttachmentFormSet)一切正常。但是当我添加另一个时,出现错误。我该如何解决这个问题,以便将 modelformsets 与继承模型一起使用?

最佳答案

解决了。如果你仔细看

# this has forms.ModelForm
class ImageAttachmentForm(forms.ModelForm):
# this has forms.Form
class AudioAttachmentForm(forms.Form):

我已将 forms.Form 更改为 forms.ModelForm,现在一切正常 - 这是一个简单的复制/粘贴错误。

关于python - 元类与 Django 中的 modelformset_factory 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7951627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com