【发布时间】: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