我有这个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)
答案 0 :(得分:2)
您可以使用bet__status=...
:
result = Result.objects.filter(bet__status='Active')
答案 1 :(得分:2)
免责声明:在撰写此答案时,相关模型未知
如果Result
模型有ForeignKey
到Bet
,您可以按联接进行过滤 - 这会更像是
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'))