首页 > 解决方案 > 连接 2 个未连接的表,但通过多对多关系连接到同一个表

问题描述

我在 django 项目中有以下设置

一个描述“人”的模型,这个模型包括2个多对多关系字段a。第一个单元字段连接到单元模型 (m2m) b。第二个工具字段连接到工具模型 (m2m)

单元和工具没有直接连接,但我想列出给定单元中使用的所有工具。

我不确定如何做到这一点,因为这两个表没有连接?

class Person(models.Model):
    name = models.CharField(max_length=100)
    unit = models.ManyToManyField(Unit, blank=True)
    rtools = models.ManyToManyField(Rtool, blank=True)

class Tool(models.Model):
    tool_name = models.CharField(max_length=100)
    tool_description = models.TextField( blank= True)

class Unit(models.Model):
    unit_name = models.CharField(max_length=250)

** --- 我在视图部分找到了一个可行的解决方案

我将搜索分解为 2 个连续的关节。

  1. 对于给定的单元,我首先创建该单元的人员成员的查询集(我称为人员);

  2. 然后我可以使用该查询集使用 __in 过滤这些人使用的工具

这工作正常,但我不确定这是否是最好的方法?

def unit_detail(request, slug):
    unit = get_object_or_404(Unit, slug=slug)
    persons = Person.objects.filter(unit=unit) 
    tools = Rtool.objects.filter(
        person__in = researchers).distinct()

    ...

标签: sqldjangomany-to-many

解决方案


我还没有测试过,所以我不确定这是否可行,我也不知道我是否正确理解了你的问题,但你可以尝试做这样的事情:

视图.py:

instance_unit = Unit.objects.get(id=<id of unit>)

units = Person.objects.filter(unit=instance_unit)

模板.py

    {% for tools in units %}

        {{ tools.rtools.tool_name }}

    {% endfor %}

正如我所说,还没有测试,我不确定这是否是你想要的结果。


推荐阅读