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.POST
get\u context\u data()


approve
仅在用户单击保存按钮时才会出现在输入数据中。如果他们单击“拒绝”按钮,则不会被拒绝。这就是问题所在吗?不,对不起。所以我只想知道用户点击了哪个subbmit输入。只需要在
self.request.POST中存在键approve或defect即可。当前,当单击其中一个时,在
get\u context\u data()
中不会发生这种情况。只有在重写post()时,我才能在post命令中看到批准或拒绝。