【发布时间】:2017-02-20 08:21:57
【问题描述】:
我目前正在尝试使用 Django (v1.10) ORM 做一些我认为应该可行的方法,但我很难理解如何应用记录的方法来解决我的问题。
编辑:所以这是我一起破解的 sql,以从 dbshell 返回我想要的数据,现在使用 postgresql 数据库,在我意识到我原来的 sqlite3支持的 sql 查询不正确:
select
voting_bill.*,vv.vote
from
voting_bill
left join
(select
voting_votes.vote,voting_votes.bill_id
from
voting_bill
left join
voting_votes
on
voting_bill.id=voting_votes.bill_id
where
voting_votes.voter_id = (select id from auth_user where username='richard' or username is Null)
)
as
vv
on
voting_bill.id=vv.bill_id;
这是我的投票应用程序的“models.py”:
from django.db import models
from django.contrib.auth.models import User
class Bill(models.Model):
name = models.CharField(max_length=255)
description = models.TextField()
result = models.BooleanField()
status = models.BooleanField(default=False)
def __str__(self):
return self.name
class Votes(models.Model):
vote = models.NullBooleanField()
bill = models.ForeignKey(Bill, related_name='bill',
on_delete=models.CASCADE,)
voter = models.ForeignKey(User, on_delete=models.CASCADE,)
def __str__(self):
return '{0} {1}'.format(self.bill, self.voter)
我可以看到我的 sql 按我预期的方式工作,投票被添加到末尾,或者如果用户尚未投票,则返回 null。
我正在努力使查询集采用这种格式,以便我可以在模板中对其进行迭代以生成一个表,如果结果为空,我可以提供一个链接,将用户带到另一个视图。
我已阅读有关 select_related 和 prefetch_related 的信息,但正如我所说,我正在努力弄清楚如何将其转换为如何在 SQL 中执行此操作。
【问题讨论】:
标签: python django join django-queryset where-clause