以下是我的模型(非常复杂,我用字母来简化):
class W(models.Model):
content = models.CharField(max_length=50)
is_important = models.BooleanField(default=False, blank=False)
class Se(models.Model):
ws = models.ManyToManyField(W)
class Ra(models.Model):
ses = models.ManyToManyField(Se)
class Pq(models.Model):
ras = models.ForeignKey(Ra)
class PqSe(models.Model):
pq = models.ForeignKey(Pq)
se = models.ForeignKey(Phrase)
class PqSeW(models.Model):
pq_se = models.ForeignKey(PqSe)
w = models.ForeignKey(W)
idx = models.IntegerField(blank=False)
class Person(models.Model):
user = models.ForeignKey(User)
class PersonPqSeW(models.Model):
pq_se_w = models.ForeignKey('PqSeW')
is_valid = models.BooleanField(default=False, blank=False)
对于给定的Pq
,我需要的是,以包含所有Se
:
W
重要(is_important=True
)而不是PersonPqSeW
W
重要(is_important=True
)和PersonPqSeW
,但无效(is_valid=False
)。答案 0 :(得分:1)
你可以试试这个:
from django.db.models import Q
se_qs = Se.objects\
.filter(pqse__pq=pq, ws__is_important=True)\
.exclude(Q(pqse__pqsew__personpqsew__is_valid=False) |
Q(pqse__pqsew__personpqsew__isnull=False))
基本上,他们的想法是排除不相关的记录。 复杂性在于查询嵌套关系。有关详细信息,请参阅documentation here
另外,如果您想让它更具可读性,我建议您考虑使用related_name
for Foreign Keys
此外,有关Q
objects