子查询选择where子句

时间:2016-02-19 08:09:31

标签: django

我有这个sql语句:

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)

3 个答案:

答案 0 :(得分:2)

您可以使用bet__status=...

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

答案 1 :(得分: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的答案是可行的方法

答案 2 :(得分:0)

您可以嵌套查询集

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