django - Django查询多对多字段
问题描述
我正在创建一个简单的 django 项目,该项目处理存储书籍和作者的名称以及存储待读列表(TBR)。TBR 表以多对多的方式连接到书表。
现在,我对如何查询特定 TBR 中的书籍列表感到困惑。
我写的代码如下:
class BookManager(models.Manager):
def is_read(self):
return self.filter(read='y')
def is_not_read(self):
return self.filter(read='n')
class Genre(models.Model):
name = models.CharField(max_length=200, help_text='Enter a book genre (e.g. Science Fiction)')
def __str__(self):
return self.name
class Author(models.Model):
first_name = models.CharField(max_length=100, help_text="Enter first name of the author",default="Unknown")
last_name = models.CharField(max_length=100, help_text="Enter last name of the author",default="Unknown")
def __str__(self):
return f'{self.first_name} {self.last_name}'
class Book(models.Model):
YES = 'y'
NO = 'n'
DID_READ_CHOICES = [
(YES,'Yes'),
(NO,'No'),
]
title = models.CharField(max_length=100)
author = models.ForeignKey(
Author,
on_delete=models.SET_NULL,
null=True,
related_name='author_books'
)
genre = models.ManyToManyField(Genre, help_text='Select a genre for this book')
summary = models.TextField(max_length=1000, help_text='Enter a brief description of the book',blank=True,null=True)
read = models.CharField(
max_length=1,
choices=DID_READ_CHOICES,
default=NO,
)
objects = BookManager()
class Meta:
ordering = ['title']
def __str__(self):
return self.title
class TBR(models.Model):
title = models.CharField(max_length=100)
book = models.ManyToManyField(
Book,
related_name='in_tbr',
)
class Meta:
ordering = ['title']
def __str__(self):
return self.title
我是 Django 新手,我指的是 Django 文档,任何帮助将不胜感激。
谢谢
编辑:我尝试了以下方法:
>>> to_be_read = TBR.objects.get(title='TBR1')
>>> for book in to_be_read.book:
... book.title
...
但出现以下错误:
Traceback(最近一次调用最后一次):
文件“”,第 1 行,
类型错误:'ManyRelatedManager' 对象不可迭代
解决方案
你应该使用book.all()
尝试这个
>>> to_be_read = TBR.objects.get(title='TBR1')
>>> for book in to_be_read.book.all():
... book.title
...
推荐阅读
- list - 将整数列表显示为字符串
- firebase-authentication - Firebase 身份验证是否可用于 blazor?
- security - K8S - 使用 Prometheus 以安全的方式监控另一个 prometheus 实例
- python - Django rest framework show or hide API objects with checkbox in admin
- java - t0 如何替换数组或对象元素并删除未使用的重复元素
- php - OS X 10.15.1 Catalina 上的 PHP 7.1 和 Brew 上的 PHP 7.3 冲突
- typescript - 如何根据值过滤记录键?
- reactjs - 有没有办法检查用户在 React 中所做的任何状态更改?
- python - 如何正确包装使用 qt 和 shiboken2 的 c++ 库?
- jquery - 表单未提交,单击提交按钮时没有任何反应