Django:请帮助这个查询集

时间:2010-10-09 18:32:20

标签: django django-models django-queryset

我有一个Django模型,如下所示,我用它来跟踪哪些IP地址访问我的网站以及何时访问。

class Visit(models.Model):
    created         = models.DateTimeField(default=datetime.utcnow)
    ip              = models.IPAddressField(editable=False)

我想在此模型上编写一个方法,该方法返回特定IP最后100次访问所用的天数。来自IP的单日(小时等)的多次访问都计为单独访问。因此,如果有人在过去2天内访问过该网站100次,则在过去8天内将返回2次,100次,将返回8次,依此类推。

2 个答案:

答案 0 :(得分:1)

您可能希望将created_on的default =更改为auto_now_add,因为如果您使用的是dev服务器以外的服务器,则datetime.utcnow不会更新:

class Visit(models.Model):
    created         = models.DateTimeField(auto_now_add=True,editable=False)
    ip              = models.IPAddressField(editable=False)

from datetime import datetime
def days_for_100(ip_addr):
  now = datetime.now()
  dates = Visit.objects.filter(ip=ip_addr)
  if dates.count()<100:
    latest = dates.latest('-created')
  else:
    latest = dates.dates('created','day',order='DESC')[99]
  return (now-latest).days # timedelta.days

这将返回第100次访问之前发生的天数(或者如果访问次数少于100次,则会在多长时间之前发生第一次访问)

答案 1 :(得分:0)

一种简单的方法是获取ip地址的最后100个Visit对象,并计算其中唯一created个objets的数量。

def num_of_dates(ip_addr)    
    dates = [v.created for v in Visit.objects.filter(ip=ip_addr).order_by('-created')[0:100]]
    unique_dates = set(dates)
    return len(unique_dates)