2014-07-05 233 views
0

我想要从扫描的last 100数据包中获取所有包含status = 'open'的数据包的计数。Django过滤器查询

目前我做的顺序搜索,即

packet_obj = Packets.objects.all().oreder_by('-time')[:100] # getting the last 100 packets 

for packets in packet_obj: 
    if packets.status == 'open' : count += 1 # comparing the status 

有直达单查询得到这个算不算?

+0

为什么不能你只是做'QS = Packets.objects.order_by ('-time')[:100]'和'len(qs.filter(status ='open')[:100])' – karthikr

回答

0
在单行

你可以试试这个,而是循环的,我认为它不可能

packet_obj = Packets.objects.all.oreder_by('-time')[:100] 
count=sum(1 for packets in packet_obj if packets.status == 'open') 

另外你可以试试这个method

+0

而不是应用for循环,Isnt是否有查询? – PythonEnthusiast

+0

@ user1162512检查此问题http://stackoverflow.com/questions/4285420/django-cannot-update-a-query-once-a-slice-has-been-taken –

+0

感谢您的链接。在第二个答案中提供了27个upvotes的链接,哪一个会更快,使用一个循环,因为我目前正在做或答案本身? – PythonEnthusiast