0

Я изучаю django из thedjangobook, и есть пример на представлениях, основанных на классе, а также в документах django, here, моя проблема в том, что я получаю сообщение об ошибке когда я пытаюсь запустить это.Объект должен быть экземпляром или подтипом типа в django

Предполагается следить за последнее время кто-нибудь смотрел на автор:

models.py

class Author(models.Model): 
    salutation = models.CharField(max_length=10, null=True) 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=40) 
    email = models.EmailField(blank=True, verbose_name='e-mail') 
    headshot = models.ImageField(upload_to='author_headshots', null=True, blank=True) 
    last_accessed = models.DateTimeField(null=True) 

urls.py

urlpatterns = [ 
    url(r'^authors/(?P<pk>[0-9]+)/$', views.AuthorDetailView.as_view(), name='AuthorDetailView'), 
] 

views.py

class AuthorDetailView(DetailView): 

    def get_object(self, queryset=Author.objects.all()): 
     # Call the superclass 
     object_1 = super(Author, self).get_object() 

     # Record the last accesed date 
     object_1.last_accessed = timezone.now() 
     object_1.save() 

     # Return the object 
     return object_1 

Ошибка:

Traceback (most recent call last): 
    File "/home/alex/Documents/Proiecte/Django/Django_tutorial/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 39, in inner 
    response = get_response(request) 
    File "/home/alex/Documents/Proiecte/Django/Django_tutorial/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/home/alex/Documents/Proiecte/Django/Django_tutorial/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/home/alex/Documents/Proiecte/Django/Django_tutorial/venv/lib/python3.5/site-packages/django/views/generic/base.py", line 68, in view 
    return self.dispatch(request, *args, **kwargs) 
    File "/home/alex/Documents/Proiecte/Django/Django_tutorial/venv/lib/python3.5/site-packages/django/views/generic/base.py", line 88, in dispatch 
    return handler(request, *args, **kwargs) 
    File "/home/alex/Documents/Proiecte/Django/Django_tutorial/venv/lib/python3.5/site-packages/django/views/generic/detail.py", line 115, in get 
    self.object = self.get_object() 
    File "/home/alex/Documents/Proiecte/Django/Django_tutorial/mysite/books/views.py", line 179, in get_object 
    object_1 = super(Author, self).get_object() 
TypeError: super(type, obj): obj must be an instance or subtype of type 

ответ

4

Ваш метод get_object пытается вызвать супер, но вам нужно передать имя текущего класса, а не название модели

object_1 = super(Author, self).get_object() 

должен быть

object_1 = super(AuthorDetailView, self).get_object() 
    object_1 = super().get_object() # The args can be omitted for Python 3 
+1

omg, я не могу поверить, что не видел этого, и я сделал это много раз, просто ошибка сейчас, программа автоматически завершила его. Спасибо :) –

+0

Любые идеи, как это должно было быть написано в шаблоне? Они не предлагают пример шаблона. –

+0

@NitaAlexandru - Это не то, что вы должны делать в шаблоне – Sayse

Смежные вопросы