Questions matching query does not exist...,как испаравить?

Рейтинг: 0Ответов: 1Опубликовано: 15.01.2023
    DoesNotExist at /delete/51/
Questions matching query does not exist.

ошибка означает, что ничего подобного не найдено, хотя в бд данная запись имеется. Кроме того эта ошибка появляется не у всех записей.

views

class QuestionDeleteView(LoginRequiredMixin, DeleteView):
    model = Questions
    context_object_name = 'delete_form'
    success_url = reverse_lazy('home')
    success_msg = 'Все ок'
    pk_url_kwarg = "q_pk"
    
    def post(self, request, *args, **kwargs):
        messages.success(self.request, self.success_msg)
        return super().post(request)
    
    def delete(self, request, *args, **kwargs):
        self.object = self.get_object()
        if self.request.user != self.object.author:
            return self.handle_no_permission()
        success_url = self.get_success_url()
        self.object.delete()
        return HttpResponseRedirect(success_url)

urls

path('delete/<int:q_pk>/', QuestionDeleteView.as_view(), name='delete'),

шаблон

<form id="delete_form{{more_q.id}}" action="{% url 'delete' more_q.pk %}" method="post">{% csrf_token %}{{ delete_form }}</form>
      <a href="javascript:void()" onclick="delete_question{{more_q.id}}()">Удалить</a>
      <script>
          function delete_question{{more_q.id}}() {
              if (confirm("Вы уверены")) {
                  document.getElementById('delete_form{{more_q.id}}').submit()
              }
          }
          </script>

models

class Questions(models.Model):
"""Модель для формирования вопросов"""
author = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,verbose_name='Владелец статьи',default='')
q_name = models.CharField(max_length=255, verbose_name='Вопрос')
slug = models.SlugField(max_length=255, db_index=True, verbose_name='URL')  # unique= поле уникальное
tags = TaggableManager()
q_text = models.TextField(verbose_name='Контент',default='')
is_published = models.BooleanField(default=True, verbose_name='Состояние публикации')
time_create = models.DateTimeField(auto_now_add=True, verbose_name='Время создания')



def get_absolute_url(self):
    return reverse('question', kwargs={'q_pk': self.pk})

def get_answer(self):
    return self.answer_set.filter(parent__isnull=True)

def __str__(self):
    return self.q_nam

e

ошибка

    Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/delete/51/

Django Version: 4.1.4
Python Version: 3.8.10
Installed Applications:
['user_profile.apps.UserProfileConfig',
 'notice.apps.NoticeConfig',
 'blog.apps.BlogConfig',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'tgmsg.apps.TgmsgConfig',
 'taggit',
 'django.contrib.humanize']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "C:\django-sites\community\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 189, in __get__
    rel_obj = self.field.get_cached_value(instance)
  File "C:\django-sites\community\venv\lib\site-packages\django\db\models\fields\mixins.py", line 15, in get_cached_value
    return instance._state.fields_cache[cache_name]

During handling of the above exception ('post'), another exception occurred:
  File "C:\django-sites\community\venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
  File "C:\django-sites\community\venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\django-sites\community\venv\lib\site-packages\django\views\generic\base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\django-sites\community\venv\lib\site-packages\django\contrib\auth\mixins.py", line 73, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "C:\django-sites\community\venv\lib\site-packages\django\views\generic\base.py", line 142, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\django-sites\community\venv\lib\site-packages\django\views\generic\edit.py", line 278, in post
    return self.form_valid(form)
  File "C:\django-sites\community\venv\lib\site-packages\django\views\generic\edit.py", line 284, in form_valid
    self.object.delete()
  File "C:\django-sites\community\venv\lib\site-packages\django\db\models\base.py", line 1118, in delete
    return collector.delete()
  File "C:\django-sites\community\venv\lib\site-packages\django\db\models\deletion.py", line 493, in delete
    signals.post_delete.send(
  File "C:\django-sites\community\venv\lib\site-packages\django\dispatch\dispatcher.py", line 176, in send
    return [
  File "C:\django-sites\community\venv\lib\site-packages\django\dispatch\dispatcher.py", line 177, in <listcomp>
    (receiver, receiver(signal=self, sender=sender, **named))
  File "C:\django-sites\community\habr\blog\models.py", line 54, in user_uncommented_post
    post = answer.post
  File "C:\django-sites\community\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 207, in __get__
    rel_obj = self.get_object(instance)
  File "C:\django-sites\community\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 170, in get_object
    return qs.get(self.field.get_reverse_related_filter(instance))
  File "C:\django-sites\community\venv\lib\site-packages\django\db\models\query.py", line 650, in get
    raise self.model.DoesNotExist(

Exception Type: DoesNotExist at /delete/51/
Exception Value: Questions matching query does not exist.

Ответы

▲ 0

Вам не нужно переопределять метод delete, достаточно метод get_queryset. Остальное сделает уже Ваше View самостоятельно

def get_queryset(self):
    user = self.request.user
    return super().get_queryset().filter(author=user)

Метод post тоже не надо, есть SuccessMessageMixin.