【问题标题】:Object must be an instance or subtype of type in django对象必须是 django 中类型的实例或子类型
【发布时间】:2017-06-17 23:16:31
【问题描述】:

我正在从 thedjangobook 学习 django,并且在基于类的视图中有一个示例,它也在 django 文档中,here,我的问题是当我尝试运行它时出现错误。

它应该记录任何人最后一次查看 作者:

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

【问题讨论】:

    标签: django django-models django-views django-class-based-views


    【解决方案1】:

    您的get_object 方法正在尝试调用super,但您需要传入当前类名而不是模型名

        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
    

    【讨论】:

    • 天哪,我不敢相信我没有看到,我已经做过很多次了,现在只是一个错误,程序自动完成了它。谢谢:)
    • 任何想法应该如何在模板中编写?他们没有提供模板示例。
    • @NitaAlexandru - 这不是你应该在模板中做的事情
    猜你喜欢
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2021-03-13
    • 2017-06-12
    • 2021-12-07
    • 2022-01-21
    相关资源
    最近更新 更多