Type object 'Book' has no attribute 'objects'

Question:

I am getting error AttributeError: type object 'Book' has no attribute 'objects' while running my django project.

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):
      # Getting Value of title
      title = request.POST.get('title')

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

Error

Internal Server Error: /model_instance
Traceback (most recent call last):
  File "D:Concept_and_ProjectWeb DevelopmentBackEndDjango FrameworkModellibsite- 
  packagesdjangocorehandlersexception.py", line 55, in inner
    response = get_response(request)
  File "D:Concept_and_ProjectWeb DevelopmentBackEndDjango FrameworkModellibsite- 
  packagesdjangocorehandlersbase.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:Concept_and_ProjectWeb DevelopmentBackEndDjango FrameworkModellibsite- 
  packagesdjangoviewsgenericbase.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "D:Concept_and_ProjectWeb DevelopmentBackEndDjango FrameworkModellibsite- 
  packagesdjangoviewsgenericbase.py", line 142, in dispatch
    return handler(request, *args, **kwargs)
  File "D:Concept_and_ProjectWeb DevelopmentBackEndDjango 
  FrameworkModelcategoryModel_InstanceInstance_methodviews.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
Asked By: Stephen

||

Answers:

As @DavidSchultz also stated in above comment as:

probably because you write object = bookmanager(), instead of objects = bookmanager(), in your model definition.

By default manager is objects if you don’t override.

You can do two things, one is to use, object as manager, so you should query using:

Book.object.all()

But it’s recommended to use objects so you can simply change its name to objects from object, while overriding manager then query simply through:

Book.objects.all()
Answered By: Sunderam Dubey

This crazies things happens when the name of the model is short, for example, I name my model a Board, When I try to use it using:

App.views.py:

boards = Board.objects.all()

error type object 'Board' has no attributes 'objects'

But after I rename my model from Board to SchoolBoard it’s works fine.

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

You can use it with objects in the views.py file:

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