2014-03-04 41 views
8

Ich versuche, meinen eigenen Blog mit Django zu tun. Ich habe eine Ansicht, um einen Artikel anzuzeigen, der von DetailView erweitert wird. Um Probleme mit Nacktschnecken zu vermeiden, versuche ich die Artikel mit dem Erscheinungsdatum zu klassifizieren. Die URL für einen Artikel ist wie so (wobei pk zum Slug des Artikels entsprechen):Django AttributeError Modell Objekt hat kein Attribut 'Filter'

r'articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<pk>[\w-]+)/$' 

Aus meiner Sicht möchte ich dies tun:

def get_queryset(self): 
    year = self.kwargs.get("year", None) 
    month = self.kwargs.get("month", None) 
    day = self.kwargs.get("day", None) 

    publication_date = year + "-" + month + "-" + day 

    return Article.objects.get(created_at__startswith=publication_date, slug=self.kwargs.get("pk", None)) 

Aber es funktioniert nicht und ich verstehe es nicht ... In der Tat funktioniert es, wenn ich dies tun:

return Article.objects.filter(created_at__startswith=publication_date, slug=self.kwargs.get("pk", None)) 

Aber es gibt einen QuerySet und ich möchte nur einen Artikel! ([0] gibt die gleichen Fehler)

Hier ist der Fehler:

AttributeError at /articles/2015/03/04/nouveau-site/ 
'Article' object has no attribute 'filter' 
Django Version: 1.6.2 
Exception Location: C:\Python27\lib\site-packages\django\views\generic\detail.py in get_object, line 37 
Python Version: 2.7.6 

und die volle Zurückverfolgungs:

Environment: 


Request Method: GET 
Request URL: http://localhost:8000/articles/2015/03/04/nouveau-site/ 

Django Version: 1.6.2 
Python Version: 2.7.6 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'groups', 
'posts', 
'users') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware') 


Traceback: 
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 
    114.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Python27\lib\site-packages\django\views\generic\base.py" in view 
    69.    return self.dispatch(request, *args, **kwargs) 
File "C:\Python27\lib\site-packages\django\views\generic\base.py" in dispatch 
    87.   return handler(request, *args, **kwargs) 
File "C:\Python27\lib\site-packages\django\views\generic\detail.py" in get 
    110.   self.object = self.get_object() 
File "C:\Python27\lib\site-packages\django\views\generic\detail.py" in get_object 
    37.    queryset = queryset.filter(pk=pk) 

Exception Type: AttributeError at /articles/2015/03/04/nouveau-site/ 
Exception Value: 'Article' object has no attribute 'filter' 

Vielen Dank im Voraus!

+1

Die Frage ist: '.get()' ein Modellobjekt gibt, und 'get_queryset' erwartet ein' queryset' zurückgegeben werden. Daher der Fehler. – karthikr

Antwort

11
def get_queryset(self): 
    ... 

    return Article.objects.filter(created_at__startswith=publication_date, slug=self.kwargs.get("pk", None)) 

Da get_queryset muss zurückkehren QuerySet Objekt, Modell nicht ein

Verwandte Themen