【发布时间】:2014-02-03 10:20:18
【问题描述】:
我想让查询按照sql:
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。
标签: python django django-queryset django-orm