如何在Django ORM中执行Left Outer Join?

时间:2017-10-27 06:27:58

标签: django postgresql join

我有以下型号:

class CandidateDetail(models.Model):
    full_name = models.CharField(max_length=128, null=True)
    email_id = models.CharField(max_length=64, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)


class Retake(models.Model):
    id = models.UUIDField(default=uuid.uuid4, primary_key=True, unique=True)
    candidate_detail = models.ForeignKey('CandidateDetail')
    is_expired = models.BooleanField(default=False)
    owner_detail = models.ForeignKey(User)
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)

我想执行以下左外连接查询:

SELECT s.*, r.* FROM app_candidatedetail s LEFT OUTER JOIN app_retake r ON (s.id = r.candidate_detail_id)

数据库是Postgresql。

我可以使用

进行查询

qset = CandidateDetail.objects.raw('SELECT s.*, r.* FROM app_candidatedetail s LEFT OUTER JOIN app_retake r ON (s.id = r.candidate_detail_id)')

CandidateDetail表的id字段是Django的默认ID,它是IntegerField作为主键。

但是,我想在序列化程序中使用它来将结果作为JSON返回,我无法找到它。请帮我解决有关如何为此编写ORM查询以及如何为此查询创建序列化程序的问题。

感谢。

1 个答案:

答案 0 :(得分:0)

因为您的要求是JSON,

试试这个,

>>> emp = Resource.objects.filter(der_current_role="2D Supervisor").values()
>>> for i in emp:
...  i.update(Role.objects.filter(emp_id=i['emp_id']).first().__dict__)
... 
>>> emp