我有以下类,其中包含一些属性:
class ConsentForm(models.Model):
title = models.TextField()
body = models.TextField()
teacher = models.ForeignKey(User)
deadline = models.DateField(null=True)
我希望第二个班级ConsentFormDraft
具有完全相同的字段,但所有字段都是null=True
,因为它用于表示草稿表单。
我认为不是创建所有字段,而是使用抽象类来表示所有这些字段?如果是这样,我如何在我的一个班级中指定null=True
和草稿中的null=False
?
答案 0 :(得分:0)
尝试在派生表单的构造函数中更改字段属性:
class ConsentFormDraft(ConsentForm):
def __init__(self, *args, **kwargs):
super(ConsentForm, self).__init__(*args, **kwargs)
# make first field optional
self.fields[0].required = False
这未经过测试。
答案 1 :(得分:0)
您可以在基类中设置null = True
并在另一个中执行save()检查。这需要使用ConsentFormDraft
类作为基类,并将ConsentForm
作为继承:
class ConsentForm(ConsentFormDraft):
def save(self, request=None, *args, **kwargs):
# Check for null fields and return an exception
#
super(Assessment, self).save(*args, **kwargs)
公平地说,您可以通过实施明确的表格来检查字段的有效性。它甚至可能比覆盖模型中的save()
更容易。