UpdateView не перенаправляет на success_url, определенный в моем представлении на основе классов - PullRequest
0 голосов
/ 24 апреля 2018

Когда я делаю пост в обновлении, это перенаправляет на другой URL, но не на тот, который я хочу. У меня есть приложение под названием project. Это мой project.urls.py:

urlpatterns = [
    ...
    path('edit/<int:pk>', ProjectUpdateView.as_view(), name='project_update'),
    path('detail/<int:pk>', ProjectDetailView.as_view(), name='project_detail'),
    ...
]

А это мой views.py:

class ProjectUpdateView(UpdateView):
    model = Project
    ...

    def get_success_url(self):
        return reverse_lazy('project_detail', kwargs={'pk': self.object.pk})

И мой models.py:

class Project(models.Model):
    name = models.CharField(max_length=100)
    ...
    def get_absolute_url(self):
        return reverse('project_detail', kwargs={'pk': self.pk})

Когда я создаю сообщение на этот URL /edit/5, это перенаправляет меня на /edit, и эта страница возвращает мне ошибку 404, конечно, потому что этот URL не существует. Как я могу это исправить? Я использую Django 2.0

Обновление это мой шаблон project_edit.html:

<form method='post'>
    {% csrf_token %}
    {{ form.as_p }}
    <button type='submit' class='btn'>Aceoptar</button>
</form>

1 Ответ

0 голосов
/ 24 апреля 2018

Не думаю, что это имеет какое-либо отношение к вашим get_success_url или методам get_absolute_url`.

Похоже, ваша форма действия:

<form method="post" action=".">

Так как вы публикуете с /edit/5 (без завершающего слеша), это означает, что вы публикуете на /edit/.

Вы можете изменить его на:

<form method="post" action="">

или поменять адрес

<form method="post" action="{% url 'project_update' project.pk %}">
...