如何过滤后向连接?

时间:2017-10-04 14:54:53

标签: django django-templates

我有一个模型ArticleDescription和几个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) (每种语言一个)。

c = models.Article.objects.all().order_by('articleid')

我现在正在努力创建一个联接,只选择模板中当前语言的描述。

我使用此代码来获取我的文章:

c

ArticleDescriptions中,我的模板中提供了{% for b in c %} {{ b.articledescription_set.all }} {% endfor %} ,如下所示:

c = models.Article.objects.all().join(ArticleDescription, lang=curlang).order_by('articleid')

但是,我不想要所有的描述,只需要当前语言的描述。所以我正在寻找类似的东西:

{% for b in c %}
    {{ b.articledescription.description }}
{% endfor %}

然后我可以在我的模板中使用这样的描述:

customerName = str(input('Please enter your name: '))
if customerName.isalpha() == False:
    print('%s is an invalid name, please try again!' % customerName)
else:

但是,我不知道该怎么做,或者在哪里看。

1 个答案:

答案 0 :(得分:2)

您可以使用prefetch_related和自定义Prefetch对象执行此操作。这需要在视图中完成。

desc = ArticleDescription.objects.filter(lang=curlang)
c = models.Article.objects.all().order_by('articleid').prefetch_related(Prefetch('articledescription_set', queryset=desc, to_attr='filtered_descriptions'))

现在你可以做到:

{% for b in c %}
    {{ b.filtered_descriptions }}
{% endfor %}