我想要查詢的工作原理如下SQL:Django模型查詢使用加入
sql_str = '''
select * from luckydraw_winner W
inner join luckydraw_prizeverificationcodesmslog L on W.id =L.winner_id
where W.lucky_draw_id = %s
limit 10
'''
型號:
class Winner(models.Model):
lucky_draw = models.ForeignKey(LuckyDraw)
participation = models.ForeignKey(Participation)
prize = models.ForeignKey(Prize)
mobile_number = models.CharField(max_length=15, null=True, default = None)
class PrizeVerificationCodeSMSLog(models.Model):
winner = models.ForeignKey(Winner)
mobile_number = models.CharField(max_length=15, db_index=True)
created_on = models.DateTimeField(auto_now_add=True)
因爲mobile_number
並不總是充滿Winner
模型,我要的是一個擁有手機號碼或獲得短信的贏家。所以必須加入PrizeVerificationCodeSMSLog
才能達到我的目的。
只有拿到冠軍很簡單:
winners = models.Winner.objects.filter(lucky_draw_id=id).order_by('-created_on')[:10]
但我不知道可以加什麼過濾器加入PrizeVerificationCodeSMSLog
。
我終於明白如何在django中檢索我想要的數據。
如果您想獲得型號A
受其他型號B
限制,該型號的外鍵爲A
,請不要嘗試使用filter()
。因爲A
不知道B
,但B
知道A
!只要檢索A
基地B
。
你可以在添加外鍵時將名稱添加到關係中母雞A將通過該命名關係知道B.在文檔中查看'ForeignKey.related_name'和'ForeignKey.related_query_name'。 – Raiyan