Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
327 views
in Technique[技术] by (71.8m points)

python 3.x - Django Query matching query does not exist - but I can't find the mistake

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...