从具有多对多关系 django 的两个表中过滤数据

Posted

技术标签:

【中文标题】从具有多对多关系 django 的两个表中过滤数据【英文标题】:Filter data from two tables having many to many relation django 【发布时间】:2018-09-15 14:29:09 【问题描述】:

我是 python Django 的新手。我有一个场景,我想从特定客户的插槽表中过滤掉插槽数据。使用第三个表约会连接表。在约会表中,我存储了与该客户关联的客户 ID 和插槽 ID。如何过滤掉客户所有与之关联的槽?

这是表格及其相互关系的图表。请帮我解决它。我知道通过在 SQL 中使用 join 可以获得数据。但是我想在 python Django 中过滤数据,所以我如何在 Django 中应用连接来过滤数据。我google了很多,但没有得到任何正确的答案。请在您的回答中提供适当的解释。

【问题讨论】:

您可以发布您的models.py 文件吗? 【参考方案1】:

据我了解,您想列出特定客户的所有插槽。

假设示例 cust_id = 1,那么在约会表中有与该客户关联的 slot_id 1,2,3

我会做这样的事情,

# Retreive all slot id for the customer with id = 1
slot_ids = Appointment.objects.filter(cust_id=1).values('id')

# Get all slots related to the customer 
slots = Slot.objects.filter(id__in=slot_ids)

请记住,您应该使用 values() 并检索特定列以供 id__in 使用。

在这里查看更多信息https://docs.djangoproject.com/en/2.0/ref/models/querysets/

【讨论】:

以上是关于从具有多对多关系 django 的两个表中过滤数据的主要内容,如果未能解决你的问题,请参考以下文章

Django内联表单集通过另一个模型在多对多关系中过滤

如何从django orm中的多对多关系表中提取数据

在 Django Admin 中过滤多对多框

过滤后更新 Django 的多对多

过滤多对多关系thip

过滤多对多关系中的选择