我希望能够在没有完全填满的情况下将表单保存为草稿,并且像往常一样使用经典的django表单验证来保存它。
为此,我的表单中有两个提交按钮,我在帖子请求中找到了哪个按钮已被点击:
class MyView(UpdateView):
def post(self, request, *args, **kwargs):
def submit_draft(self, request):
if 'draft' in request.POST:
out = True
else:
out = False
return out
在我的模型中,我的所有字段都允许空白字段,因此如果字段为空,则草稿会保存不完整的表单。
我希望在使用正常的 save 操作保存表单时,需要使用表单字段。
到目前为止我已经考虑过但没有成功实施的一个选项:
=>覆盖 get_form 函数,以便当我点击另存为草稿时,它只是执行正常操作,当我点击保存时,它会修改我的字段必需属性
tldr:我正在寻找一种方法来根据点击的提交按钮对我的表单执行类似的操作
for field in form:
self.fields[field].required = True
答案 0 :(得分:2)
通过按如下方式对我的表单进行子类化来解决我的问题:
我的表单基于我的模型,null和blank = True
class RegionForm(forms.ModelForm):
class Meta:
model = Region
fields = ['region_name',
'region_description'
]
def __init__(self, *args, **kwargs):
super(RegionForm, self).__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].required = True
class RegionDraftForm(RegionForm):
class Meta(RegionForm.Meta):
pass
def __init__(self, *args, **kwargs):
super(RegionDraftForm, self).__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].required = False
这样我就可以在我的视图中实例化我需要保存为草稿的表单,或者通常通过完整的表单验证来保存。
答案 1 :(得分:0)
我过去使用过的解决方案是将表单的内容序列化为"草稿"表"保存草稿"单击按钮。
当用户返回编辑表单时,您将json重新加载到表单中以继续编辑。这可以使用javascript或在django表单视图中完成。
您可能会遵循以下步骤:
这是您的Drafts
模型的示例。
class Drafts(models.Model):
user = models.ForeignKey(User)
form_name = models.CharField(max_length=100)
serialised_form = models.TextField() # could use json field here
def to_dict(self):
return json.loads(self.serialised_form)
我认为这种方法比
有许多优点