Получение объекта на основе его идентификатора - PullRequest
1 голос
/ 23 октября 2019

Настройка

Я пытаюсь написать DeleteView, который будет удалять объект на основе его идентификатора. Объект является журналом, и я хочу сослаться на журнал, в котором в данный момент находится пользователь. Так, например, если пользователь1 находится в журнале «Работа», я хочу удалить этот конкретный журнал на основе идентификатора журнала, а не что-нибудь еще.

Насколько я понимаю, Django создает поля идентификаторов (Autofield) для каждой модели.

Ошибка

Это мое текущее представление:

class DeleteJournal(LoginRequiredMixin, DeleteView):
    model = Journal
    tempalte_name = 'delete_journal.html'
    success_url = reverse_lazy('home')

    def get_object(self, queryset=None):
        id = self.kwargs['id']
        return self.get_queryset().filter(id=id).get()

Я получаю сообщение об ошибке:

enter image description here

Как это можно решить, и почему оно не работает?

EDIT 1

urlpatterns = [
    path('', CreateToJournal.as_view(), name='to-journals'),
    path('<slug:slug>', ToJournalEntriesList.as_view(), name='to-journal-entries'),
    path('<slug:slug>/delete', DeleteJournal.as_view(), name='delete-journal'),
]

Обратите внимание, я не хочу удалять на основе slug, поскольку журнал может иметь одинаковое имя и, следовательно, один и тот же slug для другого пользователя. Единственное уникальное значение - id, поэтому мне нужно get id для «текущего» журнала.

Спасибо большое заранее, очень ценю всех, кто смотрит на это.

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Чтобы удалить объект без pk или id на слаге, вы должны использовать метод get_object на вашем DeleteView

def get_object(self):
        return Journal.objects.get(pk=self.request.GET.get('pk'))

Здесь есть похожий вопрос: Django UpdateViewбез пк в URL

0 голосов
/ 26 октября 2019

Хорошо, к сожалению, ответ Луиса Сильвы не помог. Я обнаружил, что функция get_object () требует набора pk_url_kwarg, и после небольшого копания я нашел этот пост StackOverflow: Аргументы методов DetailView и использование pk_url_kwarg .

Это код дляDeleteView:

views.py

class DeleteJournal(LoginRequiredMixin, DeleteView):
    model = to_journal
    tempalte_name = 'to_journals/delete_journal.html'
    success_url = reverse_lazy('home')
    pk_url_kwarg = 'id'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...