django-admin - 如何将页面另存为草稿

标签 django-admin

我在 Django 中创建了一个包含一些必填字段的详细表单。如果当时未设置必填字段,我想毫无异常(exception)地将页面保存为草稿选项。我该怎么做?

最佳答案

如果您保存为草稿,则首先为不需要设置的字段设置 required=False。然后,在您的表单中,添加一个 bool 值字段,例如“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 按钮而不是复选框,那么您需要修改 View 并将一些参数传递给表单的构造函数,具体取决于用户是单击 save_as_draft 按钮还是仅单击保存按钮。在 Form 构造函数中保存此状态 aa self.save_as_draft 并在 Form.clean 方法中使用它来检查您是否正在保存草稿。

您好, 卢卡斯

关于django-admin - 如何将页面另存为草稿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2809939/

相关文章:

django - django 管理中的多态行为

django - 如何删除 django 模板中的面包屑和品牌?

python - 在django admin中使用代理模型自定义更改 ListView

django - 如何在 Django 管理界面中显示外部链接?

python - `Django administration` 到项目模板中的自定义标题

mysql - Django django_admin_log' 不存在

用于显示聚合的 Django 管理界面

django - Django 1.5自定义用户模型错误。 “经理不可用;用户已被交换”

Django admin - 实例需要有主键值才能使用多对多关系

Django Admin - 自定义更改 ListView