Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django';是ORM。按有差异的元素分组_Python_Django_Orm - Fatal编程技术网

Python Django';是ORM。按有差异的元素分组

Python Django';是ORM。按有差异的元素分组,python,django,orm,Python,Django,Orm,我有这个Django模型: class Visits(models.Model): ip = models.GenericIPAddressField() url = models.CharField(max_length=200) datetime = models.DateTimeField(auto_now_add=True) def __unicode__(self): return "%s : %s (%s)" % (unicode(self.ip)

我有这个Django模型:

class Visits(models.Model):
    ip = models.GenericIPAddressField()
    url = models.CharField(max_length=200)
    datetime = models.DateTimeField(auto_now_add=True)

 def __unicode__(self):
    return "%s : %s (%s)" % (unicode(self.ip), 
                             unicode(self.datetime.strftime('%d/%m/%y %H:%M:%S')), 
                             unicode(self.url))
它包含对我的网站的所有访问。例如,这些都是DB中的值:

<Visits: 127.0.0.1 : 27/11/14 00:00:00 (/)>,
<Visits: 127.0.0.1 : 27/11/14 00:01:00 (/)>, 
<Visits: 127.0.0.1 : 27/11/14 00:09:00 (/)>, 
<Visits: 127.0.0.1 : 27/11/14 00:45:00 (/)>, 
<Visits: 127.0.0.1 : 27/11/14 00:46:00 (/)>
,
, 
, 
, 
我想写一个ORM查询,用15分钟的增量对值进行分组。例如,此查询应返回
count()==2
(前三个值在第一组中,后两个值在第二组中)。我如何使用Django的ORM实现它?

在这里,我有四次拜访,我试着用28号以上的迷你餐车过滤掉

>>> visits_count = len([ obj for obj in Visits.objects.all() if obj.datetime.strftime('%M') >  '28'])
>>> visits_count
2
它适用于大于等于28的情况

>>> visits_count = len([ obj for obj in Visits.objects.all() if obj.datetime.strftime('%M') >=  '28'])
>>> visits_count
4

这不是一件容易的事,您应该首先制定出正确的SQL来实现它,然后反向工作到Django ORM。您可能必须使用
extra
方法,也许可以使用自定义聚合类,否则,只需
raw
method按15分钟增量查看这个类似的问题,你的意思是datetime对象等于或大于15分钟,对吗?我想你首先需要用一个类似时间戳的值来注释queryset,该值表示每个特定的15分钟窗口,然后在其他字段上聚合,但按注释字段分组。这可能有助于@michaeluskov,如果您想要基于不同ip的结果,那么在唯一ip 127.0.0.1的情况下,为什么您希望count()==2持续15分钟或更长时间?第一个答案应该是3(第一个、第二个和最后两个),如果您希望它通过ip不同,您可以使用查询“for obj in visions.objects.distinct('ip')”如果您想要基于不同ip的结果,那么在ip 127.0.0.1唯一的情况下,为什么您希望count()==2持续15分钟或更长时间?@Downvoter请给出您的Downvoter的原因?