【问题标题】:Type object 'Book' has no attribute 'objects'类型对象 \'Book\' 没有属性 \'objects\'
【发布时间】:2023-01-28 19:25:27
【问题描述】:

运行我的 django 项目时出现错误 AttributeError: type object 'Book' has no attribute 'objects'

模型.py

from django.db import models

# Create your models here.
"""Create or Save Model Instance. """
class BookManager(models.Manager):
  def create_book(self, title):
      book = self.create(title=title)
      return book

"""Book Model"""
class Book(models.Model):
  title = models.CharField(max_length=100, verbose_name="Book_Title")

  """Str Display. """
  def __str__(self):
      return self.title

  """To Save Model Instance. """
  object = BookManager()

视图.py

from django.views import View
from .models import Book
from django.http import HttpResponse

# Create your views here.
"""Default View """
class default_view(View):
  def get(self, request):
     queryset=Book.objects.all()
     return HttpResponse(queryset)

  def post(self, request):
      # Getting Value of title
      title = request.POST.get('title')

      """Creating Book Instance. """
      book = Book(title=title)
      book.save()
      return HttpResponse('saved')

错误

Internal Server Error: /model_instance
Traceback (most recent call last):
  File "D:\Concept_and_Project\Web Development\BackEnd\Django Framework\Model\lib\site- 
  packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
  File "D:\Concept_and_Project\Web Development\BackEnd\Django Framework\Model\lib\site- 
  packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:\Concept_and_Project\Web Development\BackEnd\Django Framework\Model\lib\site- 
  packages\django\views\generic\base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "D:\Concept_and_Project\Web Development\BackEnd\Django Framework\Model\lib\site- 
  packages\django\views\generic\base.py", line 142, in dispatch
    return handler(request, *args, **kwargs)
  File "D:\Concept_and_Project\Web Development\BackEnd\Django 
  Framework\Model\category\Model_Instance\Instance_method\views.py", line 9, in get
    queryset=Book.objects.all()
AttributeError: type object 'Book' has no attribute 'objects'
[04/Oct/2022 19:36:17] "GET /model_instance HTTP/1.1" 500 74725

【问题讨论】:

  • 可能是因为您在模型定义中写的是 object = BookManager(),而不是 objects = BookManager()

标签: python django django-models django-views django-queryset


【解决方案1】:

正如@DavidSchultz 也在上面的评论中所述:

可能是因为您在模型定义中编写了 object = bookmanager() 而不是 objects = bookmanager()。

如果您不覆盖,默认管理器是 objects

你可以做两件事,一是使用object作为经理,所以你应该使用查询:

Book.object.all()

但建议使用对象,这样您就可以简单地将其名称更改为objectsobject,在覆盖管理器的同时,只需通过以下方式查询:

Book.objects.all()

【讨论】:

    【解决方案2】:

    model 的名称很短时,就会发生这种疯狂的事情,例如,我将我的 model 命名为 Board,当我尝试使用它时:

    App.views.py:
    
    boards = Board.objects.all()
    

    错误type object 'Board' has no attributes 'objects'

    但是在我将我的模型从 Board 重命名为 SchoolBoard 之后,它工作正常。

    class SchoolBoard(models.model):
        name = models.CharField(max_length=20)
    

    您可以在 views.py 文件中将其与 objects 一起使用:

    def board(request):
        boards = SchoolBoard.objects.all()
    

    【讨论】:

      猜你喜欢
      • 2019-07-27
      • 2017-06-22
      • 1970-01-01
      • 2013-01-27
      • 2021-10-22
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多