[Django] i18n model und QuerySet...
Verfasst: Freitag 23. September 2011, 09:43
Ich arbeite daran, mein Blog besser zu Internationalisieren. Dazu habe ich nun das Model aufgesplittet und sieht vereinfacht so aus:
Einen QuerySet zu erzeugen, der alle Inhalte in einer bestimmten Sprache ausgibt ist nicht sonderlich schwer.
Allerdings möchte ich das haben:
* Gib mir alle Einträge bevorzugt in der vom Client gewünschten Sprache
* Wenn nicht in der gewünschten Sprache, dann in der "default"-Sprache
Ich frage mich, ob das in einem QuerySet überhaupt funktioniert?
Ich hab eine sortierte Liste der Sprachen, die der Client haben will. Doch wie sage ich der DB das ich jeweils nur einen Eintrag haben möchte?
Mal ein Beispiel:
Vorhandene Einträge (EN ist default):
1. Eintrag ist in DE und EN vorhanden
2. Eintrag nur in EN vorhanden
3. in DE, EN und ES vorhanden
Ein Client mit [DE, EN] erhält also:
1. Eintrag in DE
2. Eintrag in EN
3. Eintrag in DE
Ein Client mit [ES, EN] erhält:
1. EN
2. EN
3. ES
Hinzu kommt, das Pagination verwendet wird...
Gibt es so was wie OR-Verknüpfung mit "gibt nur das erste" ?
EDIT: Also laut den Aussagen von den Leuten in #django-de geht das mit dem ORM nicht. Man muß mindestens zwei Querys machen oder aber mit raw SQL CASE arbeiten...
Code: Alles auswählen
class Entry(models.Model):
sites = models.ManyToManyField(Site)
class Content(models.Model):
entry = models.ForeignKey(Entry)
language = models.ForeignKey(Language)
content = models.TextField()
is_public = models.BooleanField(default=True)
Allerdings möchte ich das haben:
* Gib mir alle Einträge bevorzugt in der vom Client gewünschten Sprache
* Wenn nicht in der gewünschten Sprache, dann in der "default"-Sprache
Ich frage mich, ob das in einem QuerySet überhaupt funktioniert?
Ich hab eine sortierte Liste der Sprachen, die der Client haben will. Doch wie sage ich der DB das ich jeweils nur einen Eintrag haben möchte?
Mal ein Beispiel:
Vorhandene Einträge (EN ist default):
1. Eintrag ist in DE und EN vorhanden
2. Eintrag nur in EN vorhanden
3. in DE, EN und ES vorhanden
Ein Client mit [DE, EN] erhält also:
1. Eintrag in DE
2. Eintrag in EN
3. Eintrag in DE
Ein Client mit [ES, EN] erhält:
1. EN
2. EN
3. ES
Hinzu kommt, das Pagination verwendet wird...
Gibt es so was wie OR-Verknüpfung mit "gibt nur das erste" ?
EDIT: Also laut den Aussagen von den Leuten in #django-de geht das mit dem ORM nicht. Man muß mindestens zwei Querys machen oder aber mit raw SQL CASE arbeiten...