0

我知道例如object.poll_set.count,但我如何过滤这些,所以我只得到我 poll_set 的一些对象的计数。我的意思是类似的东西object.poll_set.filter(pk<20).count。我想我必须在逻辑中而不是在演示中这样做,但是最好的方法是什么?

我还需要找到一些对象的“嵌套计数”。我有三个模型(模型 1、模型 2、模型 3)。模型 3 对模型 2 有一个 FK,模型 2 对模型 1 有一个 FK。在模型 1 中,我可以从模型 2 中获取引用模型 1 的记录数,但我还需要来自模型 3 的记录数指模型 2 中的任何对象,它指的是模型 1 中的特定对象。

我在 ListView 中打印模型 1 中的对象。如何获得模型 2 中引用模型 1 中任何对象的记录总数,即我在每个对象中找到的对象总数。我应该在模板中的循环中计算这个并将其打印在<tfoot>?

4

1 回答 1

0

正确的语法是object.poll_set.filter(pk__lt=20).count(). Django 使用特殊名称来比较诸如等值。__lte__iexact参阅https://docs.djangoproject.com/en/1.5/ref/models/querysets/#field-lookups。从第一个版本开始,这一直在 Django 中。

不要计入循环,因为您可能有很多不必要的数据库查找。因此,当您有两个模型:Model1(父)、Model2(子)并且想要查看每个 Model1 以及附加的 Model2 数量时,您可以这样做Model1.objects.filter(whatever).annotate(model2_count=Count('model2'))

编辑:澄清自定义计数功能应该在哪里

您的视图可能如下所示:

视图.py

def model1_list(request):
  objects = Model1.objects.all().annotate(model2_count=Count('model2'))
  return TemplateResponse(request, 'your_template.html', {'objects':objects})

和你的模板“your_template.html”:

{% for o in objects %}
  <b>{{ o }}</b> - model2s: {{ o.model2_count }} <br/>
{% endfor %}
于 2013-04-29T07:27:32.087 回答