如何将页面保存为草稿

时间:2010-05-11 10:41:11

标签: django-admin

我在Django中创建了一个具有一些必填字段的详细表单。如果当时没有设置必填字段,我想将页面保存为草稿选项,无例外。我该怎么办?

1 个答案:

答案 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方法中使用它来检查是否保存草稿。

问候, 卢卡斯