【问题标题】:Connecting 2 unconnected tables but are connected to the same table via many-to-many relations连接 2 个未连接的表,但通过多对多关系连接到同一个表
【发布时间】:2021-06-22 04:18:33
【问题描述】:

我在一个 django 项目中有以下设置

描述“Person”的模型,该模型包含2个多对多关系字段 一种。第一个单元字段连接到一个单元模型 (m2m) 湾。第二个工具字段连接到工具模型 (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()

    ...

【问题讨论】:

    标签: sql django many-to-many


    【解决方案1】:

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

    views.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 %}
    

    正如我所说,尚未测试,我不确定这是否是您想要的结果。

    【讨论】:

    • 谢谢。我不工作,但它让我找到了解决方案!查看我将发布的答案
    猜你喜欢
    • 2019-08-22
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2011-06-15
    • 2018-12-19
    • 2017-09-04
    相关资源
    最近更新 更多