sql - 连接 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 个连续的关节。
对于给定的单元,我首先创建该单元的人员成员的查询集(我称为人员);
然后我可以使用该查询集使用 __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()
...
解决方案
我还没有测试过,所以我不确定这是否可行,我也不知道我是否正确理解了你的问题,但你可以尝试做这样的事情:
视图.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 %}
正如我所说,还没有测试,我不确定这是否是你想要的结果。
推荐阅读
- sql - 是否可以从列中获取金额并从该金额中减去子查询?
- android - Android 在另一个之上添加一个小活动
- javascript - 视频仅在 Chrome 上出现像素化
- python-3.x - 有 celery.exceptions.NotRegistered 但 celery -A app 检查已注册显示我的任务已注册
- oauth - 在移动应用程序中使用 OAuth 2.0 授权代码流时,浏览器应该向移动应用程序返回授权代码或访问令牌吗?
- react-native - 如何使用 React Native 将具有自动大小的图像放入列中?
- java - 如何从现有的 java.util.Date 对象中单独获取时间和日期部分
- django - 如果相同的字符串存储在其中,如何更改 slug?
- ios - 在 webView(_:decidePolicyFor:decisionHandler:) 中读取 HTML 元素
- java - “E/AndroidRuntime: FATAL EXCEPTION: main”在我尝试创建 SipFactory 实例时引起