python - 如何过滤包含对象的ManyToMany

标签 python django django-models

我有这样的对象:

class Pencil(models.Model):
    color = models.CharField(max_length=20, unique=True)

class Box(models.Model):
   pencils = models.ManyToManyField(Pencil)
   name = models.CharField(max_length=50)

假设我有一支蓝色铅笔:

pencil = Pencil.objects.create(color='blue')

然后我创建一些 Box 类的实例。然后我按名称进行一些过滤

boxes = Box.objects.filter(name__startswith='Big')

如何进一步过滤以仅获取名称以“Big”开头并且带有蓝色铅笔的盒子?我无法执行诸如 pencil.box_set.all() 之类的操作,因为我已经对框进行了一些过滤。

最佳答案

您可以像过滤中的一对多关系一样对待多对多关系:

boxes = Box.objects.filter(name__startswith='Big', pencils__title='blue')

关于python - 如何过滤包含对象的ManyToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27649530/

相关文章:

python - 你能解释一下下面的功能吗?

python - 是否可以设置 m2m 对象与其自身不具有递归关系?

Python astimezone() 意外结果

python - 合并相似列上的两个数据框

django - ModelChoiceField() 上的“to_field_name”参数似乎不起作用

python - 在 Django 中间件中设置 cookie

sql - Django 复杂的过滤器和顺序

python - 主键字段上的 serialize=False 是什么意思?

python - 自定义 Django ClearableFileInput 小部件的样式

python : method resolution order of old-style (or classic) and new-style objects