我在Django中创建了一个具有一些必填字段的详细表单。如果当时没有设置必填字段,我想将页面保存为草稿选项,无例外。我该怎么办?
答案 0 :(得分:2)
如果保存为草稿,则不必设置的字段首先设置required = False。然后,在表单中添加一个类似'save_as_draft'的字段,这是一个布尔值。现在,您需要一种方法来验证这些字段,具体取决于save_as_draft字段的状态(无论用户是否选中此字段)。你可以使用这样的方法:
def is_provided(self, field):
value = self.cleaned_data.get(field, None)
if value == None or value == '':
self._errors[field] = ErrorList([u'This field is required.'])
if field in self.cleaned_data:
del self.cleaned_data[field]
将此方法添加到表单中,并在表单的clean方法中使用它来验证字段。这看起来像这样:
def clean(self):
draft = self.cleaned_data.get('save_as_draft', False)
if not draft:
# User doesn't save a draft so we need to check if required fields are provided
req_fields = ['field1', 'field2', 'field3']
for f in req_field:
self.is_provided(f)
return self.cleaned_data
如果用户更喜欢save_as_draft按钮而不是复选框,那么您需要修改视图并将一些参数传递给表单的构造函数,具体取决于用户是否单击了save_as_draft按钮或只是保存按钮。在Form构造函数中保存此状态aa self.save_as_draft并在Form.clean方法中使用它来检查是否保存草稿。
问候, 卢卡斯