Django web应用程序未重定向和发布

Django web应用程序未重定向和发布,django,django-forms,django-views,django-2.0,Django,Django Forms,Django Views,Django 2.0,我不确定问题出在哪里,因为我按下了提交按钮,它没有显示错误。它应该用表单中填写的数据更新数据库,然后将它们重定向回“搜索”页面(option.html) models.py: OptionChoice = ( ('A','A'), ('B','B'), ('C','C'), ) class OptionPlan(models.Model): option = models.CharField(max_length=200, choices=OptionC

我不确定问题出在哪里,因为我按下了提交按钮,它没有显示错误。它应该用表单中填写的数据更新数据库,然后将它们重定向回“搜索”页面(option.html)

models.py:

OptionChoice = (
    ('A','A'),
    ('B','B'),
    ('C','C'),
    )

class OptionPlan(models.Model):
    option = models.CharField(max_length=200, choices=OptionChoice, default="DEFAULT", blank=True)
    ...
    updated = models.DateField(max_length=20, null=True)
    updatedBy = models.CharField(max_length=10, null=True)
URL.py:

app_name = 'Benefits'

urlpatterns = [
    path('simple_upload', views.simple_upload, name='simple_upload'),
    #path('search', views.search, name='search'),
    path('search/', FilterView.as_view(filterset_class=BenefitsFilter, template_name='Benefits/option.html'), name='search'),
    path('OptionUpdate/<int:id>', views.OptionUpdate.as_view(), name='OptionUpdate')
    ]
optionUpdate.html:

{% if user.is_authenticated %}

    <div style="margin-left:100px;margin-right:100px;">
        <form method="POST">
            <div class="row">
                <div class="col">
                    <h2 class="alert alert-primary">...</h2>

                    {% csrf_token %}
                    <div class="row">
                        <div class="col-4" style="font-size:30px;">
                            {{ form.option|as_crispy_field }}
                        </div>
                    </div>
                    ...

                <div class="col">
                    <h2 class="alert alert-success">...</h2>
                      ...
                    <div class="col" style="font-size:30px;">
                        {{ form.cb_remarks|as_crispy_field }}
                    </div>
                </div>
                <button type="submit" class="btn btn-primary btn-block">2020 Option Form Update</button>
            </div>
        </form>    
     </div>
{% else %}
{%if user.u经过身份验证%}
...
{%csrf_令牌%}
{{form.option}as|crispy_field}
...
...
...
{{form.cb|u备注{as|u crispy_field}}
2020年期权表格更新
{%else%}
非常感谢你的帮助

编辑:


如果我假设,表单抛出了某种类型的错误,您既没有打印也没有处理。首先,请尝试检查是否存在任何表单错误。

如果我假设表单抛出了某种类型的错误,而您既没有打印也没有处理这些错误。首先,请尝试检查是否存在任何表单错误。

您使用的是哪个版本的Django?从Django v1.3版到v2.2版粗略地看一下generic*,使用相同的post方法:

def post(self, request, *args, **kwargs):
    """
    Handle POST requests: instantiate a form instance with the passed
    POST variables and then check if it's valid.
    """
    form = self.get_form()
    if form.is_valid(): <--- you passed here so your form is valid
        return self.form_valid(form) <-- you overwrote this method (problem area)
    else:
        return self.form_invalid(form)
因为我们有一个表单,所以我们必须更新视图来处理表单。我们通过get_form_kwargs方法将用户传递给表单

class OptionUpdate(UpdateView):
    form_class = OptionPlanUpdateForm
    model = OptionPlan
    slug_field = 'id'
    slug_url_kwarg = 'id'
    template_name = 'Benefits/OptionUpdate.html'
    success_url = reverse_lazy('Benefits:search')

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs
***要测试表单中的错误,可以执行以下操作:

def post(self, request, *args, **kwargs):
    form = self.form_class(self.request.POST)
    print(form.errors)
    return super().post(request, *args, **kwargs)

您使用的是什么版本的Django?从Django v1.3版到v2.2版粗略地看一下generic*,使用相同的post方法:

def post(self, request, *args, **kwargs):
    """
    Handle POST requests: instantiate a form instance with the passed
    POST variables and then check if it's valid.
    """
    form = self.get_form()
    if form.is_valid(): <--- you passed here so your form is valid
        return self.form_valid(form) <-- you overwrote this method (problem area)
    else:
        return self.form_invalid(form)
因为我们有一个表单,所以我们必须更新视图来处理表单。我们通过get_form_kwargs方法将用户传递给表单

class OptionUpdate(UpdateView):
    form_class = OptionPlanUpdateForm
    model = OptionPlan
    slug_field = 'id'
    slug_url_kwarg = 'id'
    template_name = 'Benefits/OptionUpdate.html'
    success_url = reverse_lazy('Benefits:search')

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs
***要测试表单中的错误,可以执行以下操作:

def post(self, request, *args, **kwargs):
    form = self.form_class(self.request.POST)
    print(form.errors)
    return super().post(request, *args, **kwargs)

您能否提供更多有关单击“提交”时发生的情况的信息?反应如何?你们使用调试器吗?嗨,Ladom,请看上面的屏幕截图。当我单击submit时,它应该更新数据库并将用户重定向到option.html。我没有使用任何调试器。非常感谢。OptionPlan模型中是否有多对多字段?可以尝试在OptionPlan.save()之后添加OptionPlan.savem2m()。请参阅:没有外键/一对多或多对多。单击“提交”时不会显示任何错误。但它只是拒绝更新数据库并重定向到它应该在的地方!您能否提供更多有关单击“提交”时发生的情况的信息?反应如何?你们使用调试器吗?嗨,Ladom,请看上面的屏幕截图。当我单击submit时,它应该更新数据库并将用户重定向到option.html。我没有使用任何调试器。非常感谢。OptionPlan模型中是否有多对多字段?可以尝试在OptionPlan.save()之后添加OptionPlan.savem2m()。请参阅:没有外键/一对多或多对多。单击“提交”时不会显示任何错误。但它只是拒绝更新数据库并重定向到它应该在的地方!我是django的新手。请告诉我如何检查表格中是否有错误,好吗?非常感谢。我是django的新手。请告诉我如何检查表格中是否有错误,好吗?非常感谢。你是个救生员!!我被困在这里一天了!使用错误测试。我能指出这个问题。需要cb_updated和cb_updatedBy。我必须加上blank=True。此外,我已经使用上述代码更新了我的应用程序。它就像一个符咒!非常感谢!!!:)你是个救生员!!我被困在这里一天了!使用错误测试。我能指出这个问题。需要cb_updated和cb_updatedBy。我必须加上blank=True。此外,我已经使用上述代码更新了我的应用程序。它就像一个符咒!非常感谢!!!:)