django模型 - 有条件地设置空白=真

时间:2013-11-27 14:14:11

标签: python django django-models

我正在尝试构建一个应用,用户可以自定义表单。以下示例包含用于创建管理员使用的字段(QuestionFieldAnswerField)和用户填写的BoolAnswer的类:管理员可以创建一个表单问题和可能的答案。

根据django文档,blank=True与评估有关。问题是它是在类级而不是在对象级别上设置的。

如何根据相关模型设置blank=True,以便我不必重新实现自己的验证器? (参见BoolAnswer)中的伪代码

我的models.py

class QuestionField(models.Model):
    question = models.TextField(max_length=200)
    models.ForeignKey(Sheet)


class BoolAnswerField(AnswerField):
    question = models.ForeignKey(models.Model)
    if_true_field = models.TextField(max_length=100, null=True)


class BoolAnswer(models.Model):
    bool_answer_field = models.ForeignKey(BoolAnswerField)
    result = models.BooleanField()
    if_true = models.TextField(max_length=100, null=True,

                               blank=True if self.bool_answer_field.if_true_field)

**简短说明**: 如果BoolAnswerField问题的答案为True,则if_true字段应说明,为什么

1 个答案:

答案 0 :(得分:3)

不要讨厌我,但验证是可行的方法,请参阅here

class BoolAnswer(models.Model):
    bool_answer_field = models.ForeignKey(BoolAnswerField)
    result = models.BooleanField()
    if_true = models.TextField(max_length=100, null=True, blank=True)

    def clean(self)
        if self.bool_answer_field.if_true_field and not self.if_true:
            raise ValidationError('BAF is True without a reason')