Тип объекта 'Книга' не имеет атрибута 'order_by' - PullRequest
2 голосов
/ 05 марта 2019

У меня есть модель для книги:

class Book(models.Model):
    publish_house = models.ForeignKey(PublishHouse, on_delete=models.DO_NOTHING)
    author = models.ForeignKey(Author, on_delete=models.DO_NOTHING)
    title = models.CharField(max_length=50)
    price = models.DecimalField(max_digits=5, decimal_places=2)

    objects = models.Manager()

    img = models.ImageField(upload_to='books/', default='books/no.png')
    img_inside = models.ImageField(upload_to='books/', 
                              default='books/no_inside.png')
    is_available = models.BooleanField(default=True)
    book_date = models.DateTimeField(default=datetime.now, blank=True)
    is_best_selling = models.BooleanField()

    def __str__(self):
        return self.title

    class Meta:
        db_table = 'Book'

Я хочу отображать книги в шаблонах по дате (показывая недавно добавленные книги), и это представление:

def index(request):
    new_books = Book.order_by('-book_date')[:4]
    bestselling_books = Book.objects.filter('is_best_selling')[:4]
    book_context = {
        'new_books': new_books,
        'bestselling_books': bestselling_books,
    }
    advertises = Advertise.objects.all()
    adv_context = {
        'advertises': advertises
    }
    return render(request, 'pages/index.html', adv_context, book_context)

Я хочу отображать книги по порядку по дате их добавления

продолжает выдавать эту ошибку:

type object 'Book' has no attribute 'order_by'

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Вам нужно изменить эту строку

new_books = Book.objects.order_by('-book_date')[:4]

до

new_books = Book.objects.order_by('-book_date')[:4]

потому что order_by доступно в менеджере моделей.

Обновление:

def index(request):
    new_books = Book.order_by('-book_date')[:4]
    bestselling_books = Book.objects.filter(is_best_selling=True)[:4]
    advertises = Advertise.objects.all()
    book_context = {
        'new_books': new_books,
        'bestselling_books': bestselling_books,
        'advertises': advertises
    }

    return render(request, 'pages/index.html', book_context)
1 голос
/ 05 марта 2019

Книга не имеет атрибута order_by, ее менеджер

Так что вам нужно

Book.objects.order_by
...