2016-02-19 142 views
2

我有这样的SQL语句:子查询选择where子句

SELECT * FROM result WHERE bet_id IN (SELECT id FROM bet WHERE STATUS="Active") 

,这是我的看法:

def manageresult(request): 
    if 'usid' in request.session: 
     result = Result.objects.all() 
     admin = Admin.objects.get(id=request.session['usid']) 
     return render(request, 'manageresult.html', {'result':result,'admin':admin}) 
    else: 
     return redirect('login') 

如何改变result = Result.objects.all()到sql语句? 这是赌注模式:

class Bet(models.Model): 
    status = models.CharField(max_length=20, default="Active") 

这是合成模型:

class Result(models.Model): 
    bet = models.OneToOneField(Bet, on_delete=models.CASCADE) 
+1

你能证明你的模型和相关模型领域的方式吗? – Sayse

+0

@Sayse我在问题 – Krisnadi

回答

2

免责声明:写这个答案时,有问题的模型,不知道

万一Result模型具有ForeignKeyBet,可以过滤通过连接 - 这将使它更像

result = Result.objects.filter(bet__status='Active')

这将转化成下面的SQL查询

SELECT result.* FROM result INNER JOIN bet on result.bet_id = bet.id WHERE bet.STATUS="Active"

见Django的上Lookups that span relationships

文档如果情况并非如此,Todor的回答是去

+0

中增加了模型。很好的解释。谢谢 – Krisnadi

0

您可以查询集嵌套

result = Result.objects.filter(bet__in=Bet.objects.filter(status='active')) 
2

您可以使用bet__status=...

result = Result.objects.filter(bet__status='Active')