Python 寻找两个不同模型的两个查询集的交集
我的models.py看起来像Python 寻找两个不同模型的两个查询集的交集,python,django,django-rest-framework,Python,Django,Django Rest Framework,我的models.py看起来像 class RelevanceRelation(TimeStampable, SoftDeletable, models.Model): relevance_type = models.ForeignKey( RelevanceType, on_delete=models.CASCADE, related_name="relevance_relations" ) name = models.C
class RelevanceRelation(TimeStampable, SoftDeletable, models.Model):
relevance_type = models.ForeignKey(
RelevanceType,
on_delete=models.CASCADE,
related_name="relevance_relations"
)
name = models.CharField(max_length=256,
verbose_name="Relevance Relation Name")
def __str__(self):
return self.name
class RelevanceRelationValue(TimeStampable, SoftDeletable, models.Model):
entity = models.ForeignKey(
Entity, on_delete=models.CASCADE,
related_name="relevance_relation_values"
)
relevance_relation = models.ForeignKey(
RelevanceRelation,
on_delete=models.CASCADE,
related_name="values"
)
name = models.CharField(max_length=256,
verbose_name="Relevance Relation Value")
def __str__(self):
return self.name
我有两个查询集
q1 = RelevanceRelationValue.objects.filter(entity=<int>)
q2 = RelevanceRelation.objects.filter(relevance_type=<int>)
您可以执行额外的筛选:
q1 = RelevanceRelationValue.objects.filter(entity=some_value1).values('relevance_relation')
q2 = RelevanceRelation.objects.filter(
relevance_type=some_value2,
id__in=q1
)
q1=RelevanceRelationValue.objects.filter(实体=some\u value1.values('relevance\u relation'))
q2=RelevanceRelation.objects.filter(
相关性类型=某些值2,
id_uuuin=q1
)
但更合理的做法是简单地过滤相关模型,因此:
RelevanceRelation.objects.filter(
values__entity=some_value1,
relevance_type=some_value2
).distinct()
RelevanceRelation.objects.filter(
值\u实体=某些\u值1,
相关性类型=某些值2
).distinct()
因此,这里我们得到所有的
相关性
s,其中相关性类型
是一些值2
,对于一个相关的RelevanceRelationValue
存在于entity=some\u value1
我得到了一个错误原始异常文本是:“RelevanceRelation”对象没有属性“entity\u type”。
@Jack:没错,relevancerelationation
确实没有属性.entity\u type
,因此,在您的代码中,您很可能希望获得给定模型不存在的属性。哦,是的,我打错了serialiser,谢谢您的帮助
RelevanceRelation.objects.filter(
values__entity=some_value1,
relevance_type=some_value2
).distinct()