我有一个模型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:
但是,我不知道该怎么做,或者在哪里看。
答案 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 %}