Django DeleteView не находит объект БД - PullRequest
0 голосов
/ 24 мая 2018

Мой пост DeleteView возвращает ошибку Page not found (404).Мне не понятно, почему.

url.py

path('<int:pk>/<int:yr>/<int:id>/deleteit/', views.DeleteIt.as_view(), name='delete-it'),

view.py

class DeleteIt(DeleteView):
    model = MyModel

    def get_success_url(self):
        client_id = self.object.client_id
        year_id = self.object.year_id
        return reverse_lazy('itemview', kwargs = {'pk': client_id, 'yr': year_id})

шаблоны - - POSTing template

<form action="{% url 'delete-it' pk=url_pk yr=url_yr id=item_id %}" method="post" style="display: inline;">

[Ключи pk и yr взяты из генератора контекста.] Поэтому, когда я делаю запрос post из моего шаблона, URL-адрес

http://127.0.0.1:8000/MyApp/1/1/3/deleteit/

URL-адрес /pk/yr/id/ где id - идентификатор объекта MyModel в базе данных.Объект существует, и у него есть все правильные ключи.Когда я делаю POST, объект не удаляется (что, по моему мнению, является результатом отсутствия успешного вызова URL для удаления.

Нет трассировки ошибок, но консоль говорит:

[23/May/2018 22:53:32] "GET /MyApp/1/1/ HTTP/1.1" 200 13946
Not Found: /MyApp/1/1/3/deleteit/

[23/May/2018 22:55:10] "POST /MyApp/1/1/3/deleteit/ HTTP/1.1" 404 1797

Насколько я понимаю, get_success_url не вызывается из-за ошибки. DeleteView кажется очень прямым - поэтому не уверен, как он закодирован неправильно.

Любые мысли приветствуются.

1 Ответ

0 голосов
/ 24 мая 2018

DeleteView пытается найти объект по pk аргументу URL по умолчанию.Для поиска объекта по id аргументу URL необходимо указать pk_url_kwarg:

class DeleteIt(DeleteView):
    model = MyModel
    pk_url_kwarg = 'id'  

    def get_success_url(self):
        client_id = self.object.client_id
        year_id = self.object.year_id
        return reverse_lazy('itemview', kwargs = {'pk': client_id, 'yr': year_id})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...