Ich habe diese zwei Modelle.Django erweiterte Join/Abfrage, wie Fremdschlüssel zu filtern?
class City(models.Model):
city = models.CharField(max_length=200)
country = models.CharField(max_length=200)
class CityTranslation(models.Model):
city = models.ForeignKey(City)
name = models.CharField(max_length=200)
lang = models.CharField(max_length=2)
prio = models.IntegerField()
Jede Stadt kann mehrere übersetzte Namen in einer Sprache enthalten.
Also ich möchte alle Stadt mit country = "Polen" bekommen. Wenn eine entsprechende Stadt eine oder mehrere CityTranslations mit lang = name hat. Ich möchte nur die erste Bestellung von prio bekommen.
Ich mache jetzt so etwas.
City.objects.filter(country="Poland", citytranslation__land="pl").annotate(transname=F("alt_names__name"))
Aber das ist nicht funktioniert, weil:
- Wenn es eine Stadt ohne CityTranslation es
- aufgeführt werden möchten Wenn mehrere CityTranslation die sie sind alle gezeigt werden. Aber ich will nur das erste. (... .ordered_by ('prio'). zuerst())
Irgendeine Idee?
EDIT: es wurde gelöst, indem ein @property Feld verwenden, die meine CityTranslation von PRIO Bestellung und nimmt die erste:
@propert
def transcity(self):
return self.citytranslation.filter(lang="pl").order_by('-prio').first()