Django: matching query does not exist. Error: 500

I'm trying to find a bug - already a second day.

The goal was to create a button to save in-session a piece of information about a particular page that would be "read later". I'm trying to find out why I can't find a match in my query.

The id that should be generated in POST is 8, but from what I understand from logs, it's 0.

I'm looking for suggestions on how to find out where the problem is. I exchausted all ideas that I had.

Additionally, I wonder if is it a good or bad idea that in my views.py I defined called model EssayCls in two functions where I define it with different names. In def get as selected_essay = EssayCls.objects.get(slug=slug), but in def post as post = EssayCls.objects.get(slug=slug).

My views.py:

class MyEssaysView(View):
    
    def is_stored_essay(self, request, post_id):
        stored_essays = request.session.get("stored_essays")
        if stored_essays is not None:
          is_saved_for_later = post_id in stored_essays
        else:
          is_saved_for_later = False

        return is_saved_for_later

    def get(self, request, slug):
        # print("GET: slug:", slug) # test
        user_agent = get_user_agent(request)
        selected_essay = EssayCls.objects.get(slug=slug)
        user_feedback = UserFeedback()
        
        context = {
                'essay_found': True,
                'essay_all': selected_essay,
                'post_tags': selected_essay.tags.all(),
                'form': user_feedback,
                'comment_form': CommentForm(),
                'comments': selected_essay.comments.all().order_by("-id"),
                'saved_for_later': self.is_stored_essay(request, selected_essay.id)
            }

        if request.method == 'GET':
            
            if user_agent.is_pc:        
                return render(
                            request,
                            'author_developer/article-content_pc_tablet.html',
                            context
                            )

    def post(self, request, slug):
        
        """
        The incoming request from Django will have
        a POST property which contains any submitted data
        that might be attached to incoming POST request. # 3:22:00
        """
        # print("POST: slug:", slug) # test
        
        comment_form = CommentForm(request.POST)
        user_feedback = UserFeedback(request.POST) 
        user_agent = get_user_agent(request)

        post = EssayCls.objects.get(slug=slug)
        
        context = {
          "post": post,
          "post_tags": post.tags.all(),
          "comment_form": comment_form,
          'comments': post.comments.all().order_by("-id"),
          'saved_for_later': self.is_stored_essay(request, post.id)
        }
        
        if user_feedback.is_valid(): 
            user_email = user_feedback.cleaned_data['email']
            send_me_message, was_created = SendMeMessage.objects.get_or_create(email=user_email)

            post.guest.add(send_me_message)
            
            return redirect('confirm-registration', slug=slug)

        elif comment_form.is_valid():
          comment = comment_form.save(commit=False)
          comment.post = post
          comment.save()

          return HttpResponseRedirect(reverse("essay-path", args=[slug]))

        elif user_agent.is_pc:
            return render(request, "author_developer/article-content_pc_tablet.html", context)

class ReadLaterView(View):

    def get(self, request):
        stored_essays = request.session.get("stored_essays")
        print('stored_essays:', stored_essays)

        context = {}

        if stored_essays is None or len(stored_essays) == 0:
            context["essays"] = []
            context["has_essays"] = False
        else:
          essays_read_later = EssayCls.objects.filter(id__in=stored_essays)
          context["essays"] = essays_read_later
          context["has_essays"] = True

        return render(request, "author_developer/stored-essays.html", context)


    def post(self, request):
        stored_essays = request.session.get("stored_essays")
        
        if stored_essays is None:
            stored_essays = []

        post_id = int(request.POST["post_id"])

        if post_id not in stored_essays:
            stored_essays.append(post_id)
        else:
            stored_essays.remove(post_id)

        request.session["stored_essays"] = stored_essays
        
        return print('stored_essays:', stored_essays)

My urls.py:

from django.urls import path
from django.views.generic.base import RedirectView
from django.contrib.staticfiles.storage import staticfiles_storage 
from . import views

urlpatterns = [
    path('favicon.ico', RedirectView.as_view(url=staticfiles_storage.url('author\logos\media'))),
    path('', views.home_view_pa, name='developer-home'), # my-domain.com/pa_pe_developer
    path('all-essays', views.all_essays, name='all-essays'), # my-domain.com/pawerl_pe_developer FOR ALL ESSAYS
    path('<slug:slug>/success', views.confirm_registration, name='confirm-registration'),
    path('<slug:slug>', views.MyEssaysView.as_view(), name='essay-path'),
    path('read-later', views.ReadLaterView.as_view(), name='read-later')
]

My models.py:

class EssayCls(models.Model):
    title = models.CharField(max_length=200)
    organizer_email = models.EmailField(null=True)
    date = models.DateField(null=True)
    slug  = models.SlugField(unique=True, db_index=True)
    description = models.TextField(validators = [MinLengthValidator(10)])
    details = models.TextField()
    image = models.ImageField(upload_to='images')

    video = models.ForeignKey(VideoObject, blank=True, null=True, on_delete=models.SET_NULL, related_name="video_obj")
    language = models.ForeignKey(ProgLang, null=True, on_delete=models.SET_NULL) 
    guest = models.ManyToManyField(SendMeMessage, blank=True) 
    tags = models.ManyToManyField(Tag)
    
    def __str__(self):
        return f"{self.title}" 

    class Meta:
        verbose_name = "My Essay" 

my template:

<div id="read-later">
    <form action="{% url 'read-later' %}" method="POST">
        {% csrf_token %}
        
        <input type="hidden" value="{{ essay_all.id }}" name="post_id">
        <button>
        {% if saved_for_later %}
            Remove from "Read Later" List
        {% else %}
            Read Later
        {% endif %}
        </button>
    </form>
</div>

Server shell output:

Traceback (most recent call last):
  File "C:\Users\b2b\venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
  File "C:\Users\b2b\venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\b2b\venv\lib\site-packages\django\views\generic\base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\b2b\venv\lib\site-packages\django\views\generic\base.py", line 142, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\b2b\django_my_page_author\author_developer\views.py", line 197, in post
    post = EssayCls.objects.get(slug=slug)
  File "C:\Users\b2b\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\b2b\venv\lib\site-packages\django\db\models\query.py", line 650, in get
    raise self.model.DoesNotExist(
author_developer.models.EssayCls.DoesNotExist: EssayCls matching query does not exist.
Internal Server Error: /read-later
Traceback (most recent call last):
  File "C:\Users\b2b\venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
  File "C:\Users\b2b\venv\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\b2b\venv\lib\site-packages\django\views\generic\base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\b2b\venv\lib\site-packages\django\views\generic\base.py", line 142, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\b2b\django_my_page_author\author_developer\views.py", line 197, in post
    post = EssayCls.objects.get(slug=slug)
  File "C:\Users\b2b\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\b2b\venv\lib\site-packages\django\db\models\query.py", line 650, in get
    raise self.model.DoesNotExist(
author_developer.models.EssayCls.DoesNotExist: EssayCls matching query does not exist.
[02/Feb/2023 15:09:34] "POST /read-later HTTP/1.1" 500 92898

The brower output: enter image description here

Back to Top