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 с заглавной буквы.