Проблема UpdateView: очищенные данные, переданные в URL, а не в экземпляре - PullRequest
0 голосов
/ 11 декабря 2018

У меня проблема с видом обновления, но я не могу понять, почему это происходит.Поэтому, когда я пытаюсь обновить объект с помощью UpdateView, я не получаю никакой ошибки, показывая, что он просто не работает, и перезагружает страницу, а измененные данные передаются в URL:

"[11 декабря/ 2018 11:49:20] "GET /home/update/vacation/421?csrfmiddlewaretoken=Op55u8r2GG2uyDjIvW2rstfedeU646ZkrJsmUOC6824rRO5W5NTT4koNwNCIBmof&poste_traid * 100 = * iiчтобы понять, что происходит, но ничего не печатается

У кого-нибудь есть идеи, почему это не работает?

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'),

holiday_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 голосов
/ 11 декабря 2018

У вас не установлено 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 %}
...