首页 > 解决方案 > 在基于类的视图中编写“request.POST.post”的正确方法

问题描述

我正在尝试使用 CBV。我是新手。我在请求表单内的 POST 数据时遇到问题。

这是我的看法:

    form_class = LocatarioForm
    template_name = 'contrato/locatario_form.html'


    def get_initial(self):
        return {
            'contrato': self.kwargs["pk"]
        }

    def post(self, request, pk):
        segundolocatario = request.POST['segundolocatario']
        return segundolocatario

    def get_success_url(request):
        # if request.POST.post('segundolocatario') == 'Sim'
        #     return reverse('contrato:locatario', kwargs={'pk': self.object.pk})
        return reverse('contrato:conjugec', kwargs={'pk': self.object.pk})

这是模板:

                <form method="post">
                    {% csrf_token %}
                    {{form}}
                    
                    <label for="segundolocatario">Deseja cadastrar um segundo locatário para este contrato?</label>
                    <select name="segundolocatario" id="">
                        <option value="sim">Sim</option>
                        <option value="nao">Não</option>
                    </select>
                    <br><br>
                    <button type="submit">Próxima etapa</button>

                </form>

我需要请求“segundolocatario”来控制我的模板。

如何在 CBV 中做到这一点?谢谢你。

标签: django

解决方案


我认为您还没有掌握基于类的视图的基础知识。除非您从View哪个是所有通用视图的基类继承,否则您不应该覆盖 get 和 post 方法(它们根据类填充了一些样板文件)。

假设你使用FormView,你应该使用form_valid方法。此方法以form参数为参数,您可以从中获取经过验证的发布数据,使用form.cleaned_data.

我建议您查看 Django 文档以了解如何覆盖这些方法。有一个很棒的网站显示了 CBV 的所有内部属性和方法,因此您可以更好地理解它们。


推荐阅读