运行Django项目时出现AttributeError: type object 'Book' has no attribute 'objects'错误
Django 报错:AttributeError: type object 'Book' has no attribute 'objects'
问题
运行Django项目时触发以下错误:
AttributeError: type object 'Book' has no attribute 'objects'
相关代码
Models.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()
views.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): # 获取title的值 title = request.POST.get('title') """创建Book实例。 """ 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
解决方案
问题出在自定义模型管理器的变量名写错了:你在Book类里定义的是object = BookManager(),但Django默认的模型管理器属性名是复数的objects,视图里调用Book.objects.all()时自然找不到对应的属性。
修改Models.py中Book类的管理器定义,把单数的object改成复数的objects:
"""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. """ objects = BookManager() # 这里把object改成objects
修改后,Book.objects.all()可以正常查询数据,自定义的Book.objects.create_book()方法也能正常使用,同时直接创建实例保存的逻辑不受影响。
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

