Python UpdateView with form_类从POST中删除命名的提交输入
我想知道用户单击了哪个提交输入。提交的表单将转到使用Python UpdateView with form_类从POST中删除命名的提交输入,python,django,forms,post,form-submit,Python,Django,Forms,Post,Form Submit,我想知道用户单击了哪个提交输入。提交的表单将转到使用模型表单的更新视图。我已将name属性添加到提交输入中,但如果在self.request.POST中执行了如果“批准”,则在get\u context\u data()中执行此操作,则为False。我覆盖了def post()和approve是post命令中的一个键。是否有方法获得approve或拒绝以显示在get\u context\u data()中 我猜这一定与涉及的模型表单有关,但是有没有一种方法可以在不重写post方法的情况下完成它,
模型表单的更新视图
。我已将name属性添加到提交输入中,但如果在self.request.POST中执行了如果“批准”,则在get\u context\u data()
中执行此操作,则为False。我覆盖了def post()
和approve
是post
命令中的一个键。是否有方法获得approve
或拒绝
以显示在get\u context\u data()
中
我猜这一定与涉及的模型表单有关,但是有没有一种方法可以在不重写post方法的情况下完成它,或者我应该只删除它
仅供参考,我省略了一些代码,这些代码只是膨胀,与问题无关。如果里面有什么不合理的地方,我会道歉
型号.py
class Definition(DefinitionInfo):
SEV3 = 'info'
SEV2 = 'warning'
SEV1 = 'danger'
sup_sevs = (
('', 'Please select'),
(SEV3, 'Sev3'),
(SEV2, 'Sev2'),
(SEV1, 'Sev1'),
)
title = models.CharField(max_length=255)
description = models.TextField(null=True, blank=True)
resolution = models.TextField(null=True, blank=True)
sup_sev = models.CharField(max_length=7, choices=sup_sevs, null=False, blank=False)
class DefinitionForm(forms.ModelForm):
class Meta:
model = Definition
fields = ['title', 'sup_sev', 'description', 'resolution']
widgets = {
'description': forms.HiddenInput(),
'resolution': forms.HiddenInput(),
}
class DefinitionUpdate(LoginRequiredMixin, UpdateView):
model = Definition
context_object_name = 'definition'
form_class = DefinitionForm
template_name_suffix = '_form'
success_url = reverse_lazy('definitions:index')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
if self.request.method == 'POST':
print(f'Post data: {self.request.POST}')
return context
forms.py
class Definition(DefinitionInfo):
SEV3 = 'info'
SEV2 = 'warning'
SEV1 = 'danger'
sup_sevs = (
('', 'Please select'),
(SEV3, 'Sev3'),
(SEV2, 'Sev2'),
(SEV1, 'Sev1'),
)
title = models.CharField(max_length=255)
description = models.TextField(null=True, blank=True)
resolution = models.TextField(null=True, blank=True)
sup_sev = models.CharField(max_length=7, choices=sup_sevs, null=False, blank=False)
class DefinitionForm(forms.ModelForm):
class Meta:
model = Definition
fields = ['title', 'sup_sev', 'description', 'resolution']
widgets = {
'description': forms.HiddenInput(),
'resolution': forms.HiddenInput(),
}
class DefinitionUpdate(LoginRequiredMixin, UpdateView):
model = Definition
context_object_name = 'definition'
form_class = DefinitionForm
template_name_suffix = '_form'
success_url = reverse_lazy('definitions:index')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
if self.request.method == 'POST':
print(f'Post data: {self.request.POST}')
return context
视图.py
class Definition(DefinitionInfo):
SEV3 = 'info'
SEV2 = 'warning'
SEV1 = 'danger'
sup_sevs = (
('', 'Please select'),
(SEV3, 'Sev3'),
(SEV2, 'Sev2'),
(SEV1, 'Sev1'),
)
title = models.CharField(max_length=255)
description = models.TextField(null=True, blank=True)
resolution = models.TextField(null=True, blank=True)
sup_sev = models.CharField(max_length=7, choices=sup_sevs, null=False, blank=False)
class DefinitionForm(forms.ModelForm):
class Meta:
model = Definition
fields = ['title', 'sup_sev', 'description', 'resolution']
widgets = {
'description': forms.HiddenInput(),
'resolution': forms.HiddenInput(),
}
class DefinitionUpdate(LoginRequiredMixin, UpdateView):
model = Definition
context_object_name = 'definition'
form_class = DefinitionForm
template_name_suffix = '_form'
success_url = reverse_lazy('definitions:index')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
if self.request.method == 'POST':
print(f'Post data: {self.request.POST}')
return context
更新表单.html
{%csrf_令牌%}{{form.delete}}
标题
{{form.sup_sev}
严重程度
{{form.description}}
{{form.description.value}默认值{u如果没有:''}}
描述
{{form.resolution}}
{{form.resolution.value}默认值{u如果没有:''}}
决议
所以在远离它一段时间后,我已经解决了它
首先,我发现我有一个Jquery脚本,它使用$(this.submit())提交表单代码>。当然,这意味着提交它的不是提交输入。因此,只需删除该项并preventDefault()代码>成功了。以下是罪魁祸首。它将文本复制到相对隐藏的输入。(因此我有一个自动调整大小的文本区域,但仍然可以将信息发送到服务器)
第二个原因是我需要在表单中进行一些额外的配置
我在ModelForm
中添加了两个字段,分别称为approve
和declient
。每个都是一个不需要的CharField
,包括一个TextInput
小部件,attrs有{'type':'submit','value':'Approve'}
(不完全需要,但如果您只在模板中使用{{form.Approve}}
)
这样做不仅显示了在self.request.POSTget\u context\u data()
approve
仅在用户单击保存按钮时才会出现在输入数据中。如果他们单击“拒绝”按钮,则不会被拒绝。这就是问题所在吗?不,对不起。所以我只想知道用户点击了哪个subbmit输入。只需要在self.request.POST中存在键approve或defect即可。当前,当单击其中一个时,在get\u context\u data()
中不会发生这种情况。只有在重写post()时,我才能在post命令中看到批准或拒绝。