ich Abfrage wie folgt SQL arbeitet machen wollen:Django Modelle Join-Abfragen verwenden
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
'''
Modelle:
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)
weil mobile_number
nicht immer in Winner
Modell gefüllt, was ich will, ist ein Gewinner, der Handynummer hat oder wer die sms.So muss PrizeVerificationCodeSMSLog
beitreten, um meinen Zweck zu machen. erhalten
Nur Gewinner ist einfach:
winners = models.Winner.objects.filter(lucky_draw_id=id).order_by('-created_on')[:10]
Aber ich habe keine Ahnung, welche Filter PrizeVerificationCodeSMSLog
beitreten hinzugefügt werden können.
Ich habe endlich verstanden, wie ich Daten in Django abrufen möchte.
Wenn Sie Modell erhalten möchten A
durch ein anderes Modell beschränkt B
, die einen Fremdschlüssel zu A
hat, versuchen Sie nicht filter()
zu verwenden. Denn A
weiß nicht B
, aber B
wissen A
! Nur abrufen A
Basis B
.
Sie Agregate wollen kann einen Namen in eine Beziehung einfügen, wenn Sie einen Fremdschlüssel hinzufügen, t Wenn A B durch diese benannte Beziehung kennt. Überprüfen Sie 'ForeignKey.related_name' und' ForeignKey.related_query_name' in den Dokumenten. – Raiyan