python - 查找两个不同模型的两个查询集的交集
问题描述
我的 models.py 看起来像
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
即q2
我不想显示q2
其中id
存在的所有值q1 as rulevance_relation
例如:
q1 = -------------------------------
| entity | relevance_relation |
-------------------------------
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
-------------------------------
and q2 = -------------------------------
| id. | relevance_type |
-------------------------------
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 1 |
-------------------------------
so q3 should be
-------------------------------
| id. | relevance_type |
-------------------------------
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
-------------------------------
解决方案
您可以执行额外的过滤:
q1 = RelevanceRelationValue.objects.filter(entity=some_value1).values('relevance_relation')
q2 = RelevanceRelation.objects.filter(
relevance_type=some_value2,
id__in=q1
)
但简单地过滤相关模型更有意义,所以:
RelevanceRelation.objects.filter(
values__entity=some_value1,
relevance_type=some_value2
).distinct()
因此,在这里我们得到了所有RelevanceRelation
s存在relevance_type
的s ,以及与存在关联的所有 s 。some_value2
RelevanceRelationValue
entity=some_value1
推荐阅读
- reactjs - 错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。Redux 动作文件
- python - Anaconda 无法启动
- python - TypeError:无法将 str 连接到字节 - Python + pycryptodome
- ios - 在 Swift 中使用 CoreLocation 实时测量距离
- sql - 如何从主从表中获取最后一条记录
- javascript - 如何在按钮单击时通过 whatsapp 或邮件从 react web 应用程序共享 pdf 文件?
- javascript - 使用 Jest 和 react-testing-library 测试具有大量输入字段的表单的正确方法是什么?
- class - TypeError:列表索引必须是整数或切片,而不是 str - 用于时间表
- javascript - 如何使用一个数组作为另一个数组的键?
- javascript - 在单击另一个表格行之前删除类 HTML CSS JAVASCRIPT