Django перебирает объекты модели, которые содержат другой конкретный объект модели в поле ManyToManyField

У меня есть следующие модели в моем приложении django.

class author(models.Model):
    name=models.CharField(max_length=100)

class book(models.Model):
    name=models.TextField()
    authors=models.ManyToManyField(author)

Автор, безусловно, написал несколько книг. У одной книги также может быть несколько авторов.

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

for b in book.objects.filter(authors__name='HiDe'):
    print(b)

что дает AttributeError: 'function' object has no attribute 'objects', вероятно, потому что authors в книге является ManyToManyField.

Добавление books=models.ManyToManyField(author) сделает базу данных большой и громоздкой для управления, поскольку у автора может быть слишком много книг, поэтому это не то решение, которое я хочу.

Как определить book?
Кажется, что это просто функция. Не объект модели.
Ошибка говорит вам, что books не имеет атрибута objects и является функцией.

Также, как правило, хорошей практикой является написание первой буквы моделей Django с заглавной буквы.

Вернуться на верх