django:如何更改抽象类的字段属性?

时间:2011-09-01 11:51:03

标签: django django-models

我有以下类,其中包含一些属性:

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

2 个答案:

答案 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()更容易。