更新:上传与您相关联的答案需要上传。
说我有一个问题'这样的模型:
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期望每个表单都有一个上传,即使每个表单都没有显示文件字段,因此每个表单都无效。显示文件字段,因此不允许将它们提交到数据库。
总的来说,我想要的是带有条件字段的表单的表单集,具体取决于它们是否具有与之关联的上载。我试过的每种方法都有与此问题相同的问题。
有没有办法做我在这里尝试的事情?
干杯。
答案 0 :(得分:1)
null = True和blank = True使得该字段不是必需的。在modelfield中,required = False将使表单无效,即使没有任何内容。您可以向表单添加clean_field def以自定义条件字段。