【问题标题】:Django multiple one to many joinDjango 多个一对多连接
【发布时间】:2016-10-09 19:11:52
【问题描述】:

我的 Django 应用程序的很多地方都有一对多的关系。 例如我有用户、家庭和密钥:

class User(Model):
    id_user = models.AutoField(primary_key=True)
class Home(Model):
    id_home = models.AutoField(primary_key=True)
    id_user = models.ForeignKey('user.User', models.DO_NOTHING, db_column='id_user_home')
class Key(Model):
    id_key = models.AutoField(primary=True)
    id_home = models.ForeignKey('home.Home', models.DO_NOTHING, db_column='id_home_key')

在会话中,我有 user = User(1),我想获取该用户家的所有钥匙。

【问题讨论】:

  • 你的意思是user.key_set.all()
  • 是的,但它不起作用

标签: python django join


【解决方案1】:

您正在寻找的是Key.objects.filter(id_home__id_user=user)。这将创建 2 个连接,例如 Key x Home x User 并在 id_user 上进行过滤。

您可以使用以下命令检查生成的 sql:

print(Key.objects.filter(id_home__id_user=user).query)

【讨论】:

  • 如果我想处理 4 个或更多模型怎么办?
  • @Behoston django orm 通过双下划线处理连接。如果我们有另一个模型,比如Family 并且在User 上有一个ForeignKey 给家人,你就可以使用Key.objects.filter(id_home__id_user__id_family=family)
  • ;__;它看起来很脏......我真的考虑使用 SQL Alchemy ORM 而不是 Django ORM,Alchemy 在复杂查询中更具可读性,并且可能在构建查询方面提供了很多控制权。
猜你喜欢
  • 1970-01-01
  • 2016-03-19
  • 2020-05-25
  • 1970-01-01
  • 2018-06-04
  • 2019-01-07
  • 2015-03-22
  • 2018-03-29
  • 2016-09-20
相关资源
最近更新 更多