5
我有一個問題,我現在想解決一個問題。Django prefetch與中間表無關重複
隨着車型
class Quote(models.Model):
text = models.TextField()
source = models.ForeignKey(Source)
tags = models.ManyToManyField(Tag)
...
class Source(models.Model):
title = models.CharField(max_length=100)
...
class Tag(models.Model):
name = models.CharField(max_length=30,unique=True)
slug = models.SlugField(max_length=40,unique=True)
...
我想引用世界建模。與關係:一個Source
有許多Quote
s,一個Quote
有許多Tag
s。 問題是:
- 我如何獲得包含在一個
Source
(通過包含Quote
S)所有Tag
S' - 儘可能少的查詢。
- 與它們包含在源
我已經試過天真一個沒有預取相關的倍量,與模型方法
def source_tags(self):
tags = Tag.objects.filter(quote__source__id=self.id).distinct().annotate(usage_count=Count('quote'))
return sorted(tags, key=lambda tag:-tag.usage_count)
而且在模板:
{% for tag in source.source_tags|slice:":5" %}
source.quote
{% endfor %}
現在我有
sources = Source.objects.all().prefetch_related('quote_set__tags')
而在模板中,我不知道如何正確迭代以獲得Tag
的一個來源,以及如何計算它們而不是列出重複標籤。
很快就對它進行測試,至今爲止謝謝 – niklas
@ user9它是否按照您的預期工作? – Pratyush
我無法以預期的方式讓它工作。值列表中的每個源值都是多次...(至少{%for source in source%}不起作用。),結果不再按源進行分組 – niklas