【问题标题】:Django queryset in multiple tables多个表中的 Django 查询集
【发布时间】:2021-02-15 22:18:00
【问题描述】:

我有这种使用PostgreSQL的查询:

SELECT 
tbl_project_lu.project_id, 
tbl_project_lu.house_id,
tbl_project_lu.project_name AS project, 
tbl_house_lu.house_name, 
tbl_project_lu.description,
tbl_house_mbr.person_id
FROM ((tbl_house_lu INNER JOIN tbl_house_mbr ON tbl_house_lu.house_id = tbl_house_mbr.house_id) 
  INNER JOIN tbl_project_lu ON tbl_house_lu.house_id = tbl_project_lu.house_id) 
  INNER JOIN tbl_proj_mbr ON (tbl_project_lu.project_id = tbl_proj_mbr.project_id) 
  AND (tbl_house_mbr.house_mbr_id = tbl_proj_mbr.house_mbr_id) 
WHERE person_id = 'foo';

这是model.py:

class tbl_house_lu(models.Model):
    house_name =    models.CharField(max_length=30, null=False)
    house_id =      models.AutoField(primary_key=True, null=False)


class tbl_house_mbr(models.Model):
    house_id =      models.ForeignKey(tbl_house_lu, db_column='house_id', on_delete=models.CASCADE)
    person_id =     models.ForeignKey(tbl_person_lu, db_column='person_id', on_delete=models.CASCADE)  


class tbl_project_lu(models.Model):
    project_id=     models.AutoField(primary_key=True, null=False)
    house_id=       models.ForeignKey(tbl_house_lu, db_column='house_id', on_delete=models.CASCADE)
    project_name=   models.CharField(max_length=100, null=False)
    description=    models.CharField(max_length=100, null=True)


class tbl_proj_mbr(models.Model):
    project_id=     models.ForeignKey(tbl_project_lu, db_column='project_id', on_delete=models.CASCADE)
    house_mbr_id=   models.ForeignKey(tbl_house_mbr, db_column='house_mbr_id', on_delete=models.CASCADE)

在 django 中使用这种查询的最佳方式是什么? Django ORM 可以处理这种查询还是我必须为此使用存储过程?

【问题讨论】:

    标签: django postgresql django-models inner-join


    【解决方案1】:

    使用 select_related() 将预先填充适当的属性:

    一个示例定义了 3 个模型(City、Person、Book)及其依赖项。

    see select_related doc

    【讨论】:

    • 你知道如何在 Django ORM FROM ((tbl_house_lu INNER JOIN tbl_house_mbr ON tbl_house_lu.house_id = tbl_house_mbr.house_id) INNER JOIN tbl_project_lu ON tbl_house_lu.house_id = tbl_project_lu.house_id) 中进行这种查询吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多