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