【问题标题】:Convert join SQL query into django将join SQL查询转换为django
【发布时间】:2020-05-27 14:22:54
【问题描述】:

我是 django 的新手,正在尝试使用它。

如何显示连接表中的选定字段。 例如:

我有两个模型,X 和 Y。我正在根据模型 Y 的外键合并这两个模型。

class X(models.Model):
    name = models.CharField()
    id = models.AutoField(primary_key=True)


class Y(models.Model):
    owner_user = models.ForeignKey(X, models.DO_NOTHING, 
    db_column='id')
    detail = models.CharField()

如何将此查询编写为 django 代码?

SELECT 名称、ID、Body_details 从 X,Y WHERE X.id = Y.OwnerUserId;

【问题讨论】:

标签: python django django-models django-queryset


【解决方案1】:

您可以使用select_related

a = Y.objects.select_related('OwnerUserId').all()

for object in a:
    print(object.OwneruserId.name, object.OwneruserId.id, object.body)

【讨论】:

  • 您好,谢谢您的回复。但是有没有办法将它作为 Json 格式的 HttpResponse 返回,而不是使用 print 语句。我被那部分困住了。
  • @lazycoderboi,结帐:stackoverflow.com/a/2428119/5588787
【解决方案2】:

您可以在此处使用select_related

结果 = Y.objects.select_related('owner_use')

加入后的所有工作都将由此 ORM 使用 select_related 自动完成。您可以查看以前提出的与此类似的问题here

【讨论】:

    【解决方案3】:

    需要使用ForeignKey字段的related_name,默认为y_set,来访问model的反向关系:

    some_id = 1
    instance = X.objects.get(id=some_id)
    instance.y_set.all()
    

    【讨论】:

      猜你喜欢
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      相关资源
      最近更新 更多