2016-07-31 4 views
0

Ich befolge ein Tutorial, um ein Blog zu erstellen. Der Code stimmt mit dem Tutorial überein. Der einzige Unterschied ist, dass ich Django verwenden 1.9 statt 1.8Django1.9: Kein Modell entspricht der angegebenen Abfrage

aufrufen Post Modell in der Ansicht ohne

publish__year=year, 
publish__month=month, 
publish__day=day) 

keine 404 Fehler zurückgibt - No Post matches the given query.

Dies ist view.py

def post_detail(request, year, month, day, post): 
    post = get_object_or_404(Post, slug=post, 
            status='published',) 
            #publish__year=year, 
            #publish__month=month, 
            #publish__day=day) 
    return render(request, 'blog/post/detail.html', {'post': post}) 

Das Modell Teil sieht so aus models.py

class Post(models.Model): 
    ... 
    publish = models.DateTimeField(default = timezone.now) 
    ... 

Irgendwelche Ideen, warum die Abfrage nicht gefunden wird?

EDIT:

Die URL sieht aus wie localhost/blog/2016/07/30/second-post-entry/

def get_absolute_url(self): 
     return reverse('blog:post_detail', args=[self.publish.year, 
               self.publish.strftime('%m'), 
               self.publish.strftime('%d'), 
               self.slug]) 

Es scheint, dass diejenigen sind das Problem:

self.publish.strftime('%m'), # eg. == 07, but publish__month == 7 
self.publish.strftime('%d') # eg. == 30, publish__day == 30 
+0

Wenn Sie "Kein Beitrag entspricht der angegebenen Abfrage" erhalten, bedeutet dies, dass es keinen Beitrag gibt, der Jahr, Monat und Tag entspricht. Wir wissen nicht, welche Posts Sie in Ihrer Datenbank haben, was ihr Veröffentlichungsdatum ist oder welche URL Sie besucht haben, daher können wir Ihnen nicht sagen, was das Problem darüber hinaus ist. – Alasdair

+0

@Alasdair Die Struktur der URL ist was ich in meiner Datenbank finde: 'print (posts [1] .publish) 2016-07-30 17: 47: 28 + 00: 00' – user2853437

+0

Okay. 7! = '07' self.publish.strftime ('% m')! = Publish__month ... also wie man den Monat mit 0 anruft? Was wäre jetzt der richtige Weg? – user2853437

Antwort

0

Als ich es bekam, können Sie entweder ändern self.publish.strftime('%m') und self.publish.strftime('%d') zu self.publish.month und self.publish.day, entweder Sie konvertieren können Daten wurden in int publish__year=int(year), publish__month=int(month), publish__day=int(day) übergeben. Das sollte den Trick machen.

+0

@Alasdair @ Artem-Kolontay Das Konvertieren von 'month = '07'' in' int (Monat) 'hat nicht geholfen ... also habe ich mich gefragt. Ich fand heraus, dass das Problem war, "pytz" in meinem 'setting.py' zu importieren. So hat es das Problem gelöst. Aber ich habe kein 100% warum verstanden. Es hat also etwas mit meinen Datenbank-Zeittypen zu tun? Könnte jemand erklären oder verweisen? – user2853437

Verwandte Themen