条件字段和表单集

时间:2014-11-13 10:03:49

标签: django

更新:上传与您相关联的答案需要上传。

说我有一个问题'这样的模型:

Question(Model):
    question = TextField()
    upload = BooleanField()

答案'这样的模型:

Answer(Model):
    question = ForeignKey(Question)
    answer = SmallIntegerField()
    upload = FileField()

这样的形式:

AnswerForm(ModelForm):

    def __init__(self, *args, **kwargs):
        super(AnswerForm, self).__init__(self, *args, **kwargs)
        self.helper = FormHelper(self)
        self.helper.form_tag = False
        if (self.instance.question.upload):
            self.Meta.fields = ('answer', 'upload')
            self.helper.layout = Layout(
                InlineRadios('answer'),
                'upload'
            )
        else:
            self.Meta.fields = ('answer',)
            self.helper.layout = Layout(
                InlineRadios('answer'),
            )

    class Meta:
        model = Answer
        fields = ('answer', 'upload')

我有一个modelformset,这些答案显示得很好。这些输入中的每一个都包含在一个较大的表单中,而不是每个表单都是几个单独的表单,然后使用一个提交按钮提交。

并非每个答案都有一个上传字段,具体取决于它回答的问题,因此是条件字段。

问题,通过以上设置,验证的唯一表单是具有显示的上传字段的表单,其具有上传输入(仅具有上传的答案将显示文件字段) 。我期待在这里发生的是,formset期望每个表单都有一个上传,即使每个表单都没有显示文件字段,因此每个表单都无效。显示文件字段,因此不允许将它们提交到数据库。

总的来说,我想要的是带有条件字段的表单的表单集,具体取决于它们是否具有与之关联的上载。我试过的每种方法都有与此问题相同的问题。

有没有办法做我在这里尝试的事情?

干杯。

1 个答案:

答案 0 :(得分:1)

模型中的

null = True和blank = True使得该字段不是必需的。在modelfield中,required = False将使表单无效,即使没有任何内容。您可以向表单添加clean_field def以自定义条件字段。