2013-04-29 58 views
0

我知道例如object.poll_set.count,但是我怎么能过滤这些,所以我只能得到一些我poll_set对象的计数。我的意思是像object.poll_set.filter(pk<20).count。我想我必须在逻辑而不是演示文稿中做到这一点,但是最好的方法是什么?Django中的高级model_set.count 1.5

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

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

回答

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中。

不要在循环内计数,因为您可能会有很多不必要的数据库查找。 所以当你有两种型号:型号1(父),模型2(子),并希望看到每一个型号1与连接模型2的数,你做Model1.objects.filter(whatever).annotate(model2_count=Count('model2'))

编辑:澄清下,定制计数功能应该是

您的看法可能是这样的:

views.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 %} 
+0

谢谢。用'object.poll_set.filter(pk <20).count'作为模板标签。我可以在模板引擎中找到与您的示例相同的内容吗? – user2232982 2013-04-29 08:17:01

+0

不是。模板语言在设计上很愚蠢。对于逻辑,你应该使用你用python编程的视图。 – mawimawi 2013-04-29 08:44:05

+0

好的。定义这个自定义计数函数的最好方法是什么?模板标签?模型函数? – user2232982 2013-04-29 11:33:45