I created a simple weblog Model in Django.
model.py:
class Entry(models.Model):
LIVE_STATUS = 1
DRAFT_STATUS = 2
HIDDEN_STATUS = 3
STATUS_CHOICES = (
(LIVE_STATUS, 'Ver?ffentlicht'),
(DRAFT_STATUS, 'Entwurf'),
(HIDDEN_STATUS, 'Verborgen'),
)
title = models.CharField(verbose_name='Titel', max_length=250)
excerpt = HTMLField(verbose_name='Textauszug', blank=True)
body = HTMLField(verbose_name='Text')
pub_date = models.DateTimeField(default=datetime.datetime.now, verbose_name='Ver?ffentlicht am')
author = models.ForeignKey(User, verbose_name='Autor', on_delete=models.CASCADE)
enable_comments = models.BooleanField(verbose_name='Kommentare zulassen', default=True)
status = models.IntegerField(verbose_name='Status', choices=STATUS_CHOICES, default=DRAFT_STATUS)
categories = models.ManyToManyField(Category, verbose_name='Kategorie')
slug = models.SlugField(unique_for_date='pub_date')
url.py:
urlpatterns = [
path('blog/kategorie/<slug:slug>/', blog_views.entries_in_category),
path('blog/<int:year>/<int:month>/<int:day>/<slug:slug>/', blog_views.entry_detail_view),
]
views.py:
def entry_detail_view(request, year, month, day, slug):
p_date = datetime.datetime(year=year, month=month, day=day)
entry = Entry.objects.get(slug=slug,
status=Entry.LIVE_STATUS,
pub_date__year=p_date.year,
pub_date__month=p_date.month,
pub_date__day=p_date.day,
)
context = {'entry': entry,}
return render(request, 'blog/article_detail.html', context)
I get the Error: "Entry matching query does not exist." But from my point of view it looks correct. The Request matches to the kwargs from the Entry-Model.
The Traceback:
Traceback (most recent call last):
File "C:Webseitenkarlivenvlibsite-packagesdjangocorehandlersexception.py", line 47, in inner
response = get_response(request)
File "C:Webseitenkarlivenvlibsite-packagesdjangocorehandlersase.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:Webseitenkarlilogviews.py", line 32, in entry_detail_view
entry = Entry.objects.get(slug=slug,
File "C:Webseitenkarlivenvlibsite-packagesdjangodbmodelsmanager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:Webseitenkarlivenvlibsite-packagesdjangodbmodelsquery.py", line 429, in get
raise self.model.DoesNotExist(
Exception Type: DoesNotExist at /blog/2020/12/28/zwischenbericht/
Exception Value: Entry matching query does not exist.
Traceback-details:
Variable Value
day 28
month 12
datedatetime.datetime(2020, 12, 28, 0, 0)
request <WSGIRequest: GET '/blog/2020/12/28/zwischenbericht/'>
slug; zwischenbericht
year 2020
And the next:
Variable Value
args ()
kwargs {'pub_date__day': 28,
'pub_date__month': 12,
'pub_date__year': 2020,
'slug': 'zwischenbericht',
'status': 1}
name 'get'
<django.db.models.manager.Manager object at 0x000001EA43519760>
If I remove the month and the day in the views.py I get a result. If I use the month and/or day in my query, I get the error every time. Only the year works in the Query. But the result can be wrong or I get another Error. (get() returned more than one Entry)
entry = Entry.objects.get(slug=slug,
status=Entry.LIVE_STATUS,
pub_date__year=p_date.year,
# pub_date__month=p_date.month,
# pub_date__day=p_date.day,
)
Why I can't use month and day in my query?
Best regards
Stephan