[Help]- Lỗi khi deploy Django Web lên heroku

Chào cả nhà.
Em đang học làm Web với Django.
Em làm 1 web đơn giản. quản lý số lượng sách trong thư viện.
Trên máy local của em thì chạy OK hết rồi. Em đang deploy thử lên heroku, mở trang ra thì gặp lỗi :
relation “catalog_book” does not exist LINE 1: SELECT COUNT() AS “__count” FROM “catalog_book”*

Em định upload thêm 2 ảnh từ lúc bắt đầu deploy, để mọi người dễ theo dõi. nhưng nội quy chỉ cho newbie upload 1 ảnh thôi ạ.
Mong mọi người chỉ bảo ạ !

Bạn không up code lên thì ai biết được.

cám ơn bạn hungdh đã trả lời
Đây là đoạn code trong file file model.py
các class này (Author, Book, Genre, BookInstance) ko được cập nhật vào db postgresql trên heroku.

from django.db import models
from django.urls import reverse
import uuid                         # Required for unique book instances
from django.contrib.auth.models import User
from datetime import date

class Genre(models.Model):
    name = models.CharField(max_length=200, help_text="Enter a book genre") 
    def __str__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey("Author", on_delete=models.SET_NULL, null=True)
    summary = models.TextField(max_length= 1000, help_text="Enter a brief description of the book")
    isbn = models.CharField("ISBN", max_length=13, help_text='13 Character  ISBN number ')
    genre = models.ManyToManyField("Genre", help_text="Select a genre for this book")
    def __str__(self):
        return self.title
    def get_absolute_url(self):
        return reverse("book-detail", args=[str(self.id)])
    def display_genre(self):
        """Create a string for the Genre. This is required to display genre in Admin.""" 
        return ', '.join(genre.name for genre in self.genre.all()[:3])
    display_genre.short_description = 'Genre'

class BookInstance(models.Model):
    """Book Instance""" 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text="Uniquy ID for this paticular book across whole libary")
    book = models.ForeignKey("Book", on_delete=models.SET_NULL, null=True)
    imprint = models.CharField(max_length=200)
    due_back = models.DateField(null=True, blank=True)
    borrower = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
    LOAN_STATUS = (
        ("m", "Maintainance"),
        ("o", "On Loan"),
        ("a", "Available"),
        ("r", "Reversed"),
    )
    status = models.CharField(
        max_length=1,
        choices=LOAN_STATUS,
        blank=True,
        default="m",
        help_text="Book availability",
    )
    class Meta:
        ordering = ["due_back"]
        permissions = (("can_mark_returned", "Set book as returned"),)

    def __str__(self):
        return f'({self.book.title})'

    @property
    def is_overdue(self):
        if self.due_back and date.today() > self.due_back:
            return True
        return False
        
class Author(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    date_of_birth = models.DateField(null=True, blank=True)
    date_of_death = models.DateField("Died", null=True, blank=True)
    class Meta:
        ordering = ["last_name", "first_name"]
    def get_absolute_url(self):
        return reverse("author-detail", args=[str(self.id)])
    def __str__(self):
        return f'{self.last_name}, {self.first_name}'

và đây là ảnh mình chạy push lên heroku


Nhờ bạn chỉ giáo giùm ạ !

Đây là ảnh khi mình chạy migrate database

Trong model bạn có khai báo catalogue book đâu mà trong phần hiển thị bạn đòi lôi nó ra???

Lỗi của bạn là phần View không có trong khai báo model. Bạn nên show phần View của bạn nữa. Bạn đang gọi trong phần View những cái không có trong khai báo.

Bạn ơi. catalog là 1 app của Django mà mình tạo ra
còn class Book có mà bạn.
Nhờ bạn check lại giùm mình với ạ !

Mình upload phần Views.py
Nhờ bạn check giúp ạ.

from django.shortcuts import render
from catalog.models import Book, Author, BookInstance, Genre
from django.views import generic
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.decorators import permission_required
from django.shortcuts import get_object_or_404
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.contrib.auth.mixins import PermissionRequiredMixin
from catalog.forms import RenewBookForm
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from catalog.models import Author
import datetime

def index(request):
    """Home page""" 
    # calculate record of book 
    num_books = Book.objects.all().count()
    # calculate BookInstance
    num_instances = BookInstance.objects.all().count()  
    # calculate BookInstance with staus = 'a' (status = 'a')
    num_instances_available = BookInstance.objects.filter(status__exact='a').count()   
    # calculate author
    num_authors = Author.objects.count()
    # count visited times 
    num_visits = request.session.get('num_visits', 0)
    request.session['num_visits'] = num_visits + 1    
    context = {
        'num_books': num_books,
        'num_instances': num_instances,
        'num_instances_available': num_instances_available,
        'num_authors': num_authors,
        'num_visits': num_visits,
    }
    return render(request, 'index.html', context=context)

class BookListView(generic.ListView):
    model = Book
    paginate_by = 2

class BookDetailView(generic.DetailView):
    model = Book

class AuthorListView(generic.ListView):
    model = Author
    paginate_by = 2

class AuthorDetailView(generic.DetailView):
    model = Author 

class LoanedBooksByUserListView(LoginRequiredMixin,generic.ListView):
    """Generic class-based view listing books on loan to current user.""" 
    model = BookInstance
    template_name ='catalog/bookinstance_list_borrowed_user.html'
    paginate_by = 10

    def get_queryset(self):
        return BookInstance.objects.filter(borrower=self.request.user).filter(status__exact='o').order_by('due_back')

class LoanedBooksAllListView(PermissionRequiredMixin, generic.ListView):
    """Generic class-based view listing all books on loan. Only visible to users with can_mark_returned permission."""
    model = BookInstance
    permission_required = 'catalog.can_mark_returned'
    template_name = 'catalog/bookinstance_list_borrowed_all.html'
    paginate_by = 10

    def get_queryset(self):
        return BookInstance.objects.filter(status__exact='o').order_by('due_back')

@permission_required('catalog.can_mark_returned')
def renew_book_librarian(request, pk):
    """View function for renewing a specific BookInstance by librarian.""" 
    book_instance = get_object_or_404(BookInstance, pk=pk)
    # If this is a POST request then process the Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from the request (binding):
        form = RenewBookForm(request.POST)
        # Check if the form is valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required (here we just write it to the model due_back field)
            book_instance.due_back = form.cleaned_data['renewal_date']
            book_instance.save()
            # redirect to a new URL:
            return HttpResponseRedirect(reverse('all-borrowed') )
    # If this is a GET (or any other method) create the default form.
    else:
        proposed_renewal_date = datetime.date.today() + datetime.timedelta(weeks=3)
        form = RenewBookForm(initial={'renewal_date': proposed_renewal_date})
    context = {
        'form': form,
        'book_instance': book_instance,
    }
    return render(request, 'catalog/book_renew_librarian.html', context)

class AuthorCreate(CreateView):
    model = Author
    fields = '__all__'
    initial = {'date_of_death': '05/01/2018'}

class AuthorUpdate(UpdateView):
    model = Author
    fields = ['first_name', 'last_name', 'date_of_birth', 'date_of_death']

class AuthorDelete(DeleteView):
    model = Author
    success_url = reverse_lazy('authors')

Mình đọc code bạn mà phần render chưa ra catalogue book. Bạn render html thế nào.

Mí lại bạn nên đọc kĩ lại CBC và FBV.

Bạn ơi.
Mình sử dụng ListView và DetailView của Django

class BookListView(generic.ListView):
    model = Book
    paginate_by = 2

class BookDetailView(generic.DetailView):
    model = Book

đây là file urls.py của mình

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('books/', views.BookListView.as_view(), name='books'),
    path('book/', views.BookDetailView.as_view(), name='book-detail'),
    path('authors/', views.AuthorListView.as_view(), name='authors'),
    path('author/', views.AuthorDetailView.as_view(), name='author-detail'),
    path('mybooks/', views.LoanedBooksByUserListView.as_view(), name='my-borrowed'),
    path('borrowed/', views.LoanedBooksAllListView.as_view(), name='all-borrowed'),
    path('book//renew/', views.renew_book_librarian, name='renew-book-librarian'),
    path('author/create/', views.AuthorCreate.as_view(), name='author_create'),
    path('author//update/', views.AuthorUpdate.as_view(), name='author_update'),
    path('author//delete/', views.AuthorDelete.as_view(), name='author_delete'),
]

Cám ơn bạn đã support.
Mình sửa được rồi ạ
Mình update lại database là OK