Ich habe ein Modell Article
und mehrere ArticleDescription
(eine für jede Sprache).Wie rückwärts Joins gefiltert werden?
class Article(models.Model):
articleid = models.CharField(primary_key=True, max_length=100)
def __unicode__(self):
return str(self.articleid)
class ArticleDescription(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE)
lang = models.CharField(max_length=2, default='en', blank=False, null=False)
description = models.TextField(blank=True, null=True)
class Meta:
unique_together = ('article', 'lang')
def __unicode__(self):
return str(self.description)
Ich habe jetzt Probleme, wie man einen Join erstellt, um nur die aktuelle Sprache in meiner Vorlage zu wählen.
ich diesen Code verwenden, um meine Artikel zu erhalten:
c = models.Article.objects.all().order_by('articleid')
In c
, ich habe meine ArticleDescriptions
in meiner Vorlage wie folgt aus:
{% for b in c %}
{{ b.articledescription_set.all }}
{% endfor %}
Aber ich will nicht alle Beschreibungen , nur der für die aktuelle Sprache. Also ich bin auf der Suche nach so etwas wie:
c = models.Article.objects.all().join(ArticleDescription, lang=curlang).order_by('articleid')
und dann kann ich die Beschreibung wie dies in meiner Vorlage verwenden:
{% for b in c %}
{{ b.articledescription.description }}
{% endfor %}
Aber ich habe keine Ahnung, wie dies zu tun, oder wo sie suchen .
Dank es funktioniert, aber es ist zu beachten, dass 'b.filtered_descriptions' ist ein Array von' ArticleDescription'. –
Ja, willst du das nicht? –
Ja, es ist gut. In diesem Fall weiß ich, dass es nur ein Treffer ist. Noch eine kleine Frage, kann ich die 'filtered_descriptions' auch in einem' Q' Objekt im 'filter' verwenden? –