我认为这个问题已经被问了几次,然而,问题及其答案并不是那么清楚。如果您可以使标题或下面的示例更清楚。请做。
实施例: 我有一个果园,在我的果园里,我有苹果树的田地,这些苹果树有苹果。问题是使用我的模型:
class Field(models.Model):
size = models.PositiveIntergerField()
max_tree_number = models.PositiveIntergerField()
class Tree(models.Model):
field = models.ForeignKey(Field)
date_of_planting = models.datefield(editable=False)
variety = models.CharField(max_length=200)
class Apple(models.Model):
tree = models.ForeignKey(Tree)
mass = models.PositiveIntergerField()
class FieldView(generic.ListView):
template = '[app_name]/index.html'
def get_context_data(self, **kwargs):
context = super(FieldView, self).get_context_data(**kwargs)
context['tree_count'] = Field._meta.model_name
context['mass'] = ???
context['apple_count'] = ???
感谢您的时间
答案 0 :(得分:3)
您可以使用苹果数和质量数量annotate查询集。
from django.db.models import Count, Sum
def get_queryset(self):
queryset = super(FieldView, self).get_queryset()
queryset = queryset.annotate(num_apples=Count('tree__apple'), apple_mass=Sum('tree__apple__mass'))
return queryset
然后,当您遍历查询集时,您可以访问带注释的字段。
{% for obj in object_list %}
{{ obj.size }}, {{ obj.num_apples }}, {{ obj.apple_mass }}
{% endfor %}
请注意,您无需在get_context_data
中向上下文添加任何内容,因此您可以将其从视图中删除。