UpdateView问题:清理的URL中传递的数据不在实例中

时间:2018-12-11 11:56:13

标签: django django-models django-forms django-views

我的更新视图有问题,但我不知道为什么会发生。因此,当我尝试使用UpdateView更新对象时,不会显示任何错误,表明它无法正常工作,而是将更改的数据传递到url来重新加载页面:

“ [[11 / Dec / 2018 11:49:20]”获取/ home / update / vacation / 421?csrfmiddlewaretoken = Op55u8r2GG2uyDjIvW2rstfedeU646ZkrJsmUOC6824rRO5W5NTT4koNwNCIBmof&poste_travail = poste + test3

我试图覆盖form_invalid和fom_valid来了解正在发生的事情,但它不会打印任何内容

有人知道为什么这不起作用吗?

views_class.py

class VacationUpdate(LoginRequiredMixin, UpdateView):
    login_url = 'login'
    redirect_field_name = 'redirect_to'
    form_class = VacationUpdateForm
    model = Vacation
    template_name = 'chiffrage/forms/vacation_update.html'
    pk_url_kwarg = 'vacation_id'

    def form_invalid(self, form):
        print(form.changed_data)

    def form_valid(self, form):
        print(form.data)
        vacation = form.save(commit=False)
        vacation.updated_by = self.request.user
        vacation.save()
        return super().form_valid(form)

    def get_success_url(self):
        return HttpResponseRedirect(reverse('marge_prix', args=(
                                                self.object.version_contrat.contrat.site.client.slug(),
                                                self.object.version_contrat.contrat.site.client.pk,
                                                self.object.version_contrat.contrat.site.slug(),
                                                self.object.version_contrat.contrat.site.pk,
                                                self.object.version_contrat.contrat.slug(),
                                                self.object.version_contrat.contrat.id,
                                                self.object.version_contrat.slug(),
                                                self.object.version_contrat.id)))

forms.py

class VacationUpdateForm(forms.ModelForm):
    class Meta:
        model = Vacation
        fields = ['poste_travail', 'taux_marge']

urls.py

path('update/vacation/<int:vacation_id>', views_class.VacationUpdate.as_view(), name='vacation_class_update'),

path('clients/<slug:client_name>,<int:client_id>/<slug:site_name>,<int:site_id>/<slug:contrat_slug>,<int:contrat_id>/<slug:version_slug>,<int:version_id>/prix', views.vacation_add,
     name='marge_prix'),

vacation_update.html

{% extends 'base.html' %}
{% block title %} {{ request.user }}{% endblock %}
{% block ligne-titre %}{{ client }}{% endblock %}
{% block sans-div %}
<div class="main container-fluid col-8">

<form class="form-group">
    {% csrf_token%}
    <table class="table table-sm table-bordered">

    {{ form.as_table }}
    <tr>
        <td colspan="2"><input class="align-self-center btn btn-secondary " type="submit" value="Nouveau"></td>
    </tr>
    </table>
</form>
</div>
{% endblock %}

1 个答案:

答案 0 :(得分:1)

您没有为表单设置method。这意味着表单正在使用默认方法GET进行提交。

尝试将vacation_update.html更改为:

{% extends 'base.html' %}
{% block title %} {{ request.user }}{% endblock %}
{% block ligne-titre %}{{ client }}{% endblock %}
{% block sans-div %}
<div class="main container-fluid col-8">

<form class="form-group" method="post">
    {% csrf_token%}
    <table class="table table-sm table-bordered">

    {{ form.as_table }}
    <tr>
        <td colspan="2"><input class="align-self-center btn btn-secondary " type="submit" value="Nouveau"></td>
    </tr>
    </table>
</form>
</div>
{% endblock %}