0 python django many-to-many object filter
我想要filter
一个通过多对多中间关系连接到第二个模型的 Django 模型。
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)
结果应该是仅选择人员 A,因为他通过成员资格连接到具有条目 1 和 2 的组。我想使用Q
对象来完成此类任务。
谁能给我提示吗?
Person
我认为您想要您将提供给的所有组 ID 中的所有对象。
解决方案:
from django.db.models import Q
person_qs = Person.objects.exclude(~(Q(group__id=1) & Q(group__id=2)))
Run Code Online (Sandbox Code Playgroud)
在这里,我用来exclude
排除所有不是 1 和 2 的组 ID。
如果您有很多组 ID,则可以使用reduce
和operator
在单个 for 循环中构建查询。
from functools import reduce
import operator
query = reduce(operator.and_, (Q(group__id=group_id) for group_id in group_ids))
persons_qs = Person.objects.exclude(~query)
Run Code Online (Sandbox Code Playgroud)
这将形成如下查询Q(group__id=1) & Q(group_id=2) &
(等等......)
归档时间: |
|
查看次数: |
3515 次 |
最近记录: |