2016-02-19 29 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')