2014-10-21 223 views
0

我有一个包含VM分析数据的表,每次输入数据时都会插入一个时间戳。数据每小时输入一次,并在30天标记处截断。我需要编写一个Django查询来根据客户发布的整数来搜索给定的天数。Django日期范围查询

因此,客户提交数字7,Django查询返回最近7天的数据。我正在查看关于日期的文档,但它看起来并不像我想要的那样。

我真的只是需要一些帮助,在哪里看,或者即使它可能与Django。

这是我当前的查询:

vms = VmStatHistories.objects.filter(customer_id = customer_id).order_by('vm_id').distinct('vm_id').filter(datetime = datetime.datetime.today()-datetime.timedelta(days=number_of_days)) 

的车型领域:

class VmStatHistories(models.Model): 
    vm_stat_id = models.AutoField(primary_key=True, editable=False) 
    vm_id = models.BigIntegerField() 
    customer = models.ForeignKey(Customers) 
    vm_name = models.CharField(max_length=4000) 
    read_request = models.DecimalField(max_digits=15, decimal_places=2) 
    write_request = models.DecimalField(max_digits=15, decimal_places=2) 
    cpu_usage_ghz = models.DecimalField(max_digits=15, decimal_places=2) 
    memory_consumed_mb = models.DecimalField(max_digits=15, decimal_places=2) 
    memory_active_mb = models.DecimalField(max_digits=15, decimal_places=2) 
    memory_swap_mb = models.DecimalField(max_digits=15, decimal_places=2) 
    bytes_sent_kbps = models.DecimalField(max_digits=15, decimal_places=2) 
    bytes_received_kbps = models.DecimalField(max_digits=15, decimal_places=2) 
    disk_usage_mbps = models.DecimalField(max_digits=15, decimal_places=2) 
    ip_address = models.CharField(max_length=16) 
    provisioned_ram_gb = models.BigIntegerField() 
    provisioned_cores = models.BigIntegerField() 
    provisioned_storage_gb = models.BigIntegerField() 
    consumed_storage_gb = models.BigIntegerField() 
    datetime = models.DateTimeField() 

    class Meta: 
     managed = True 
     db_table = 'vm_stat_histories' 

    def __unicode__(self): # Python 3: def __str__(self): 
     return self.vm_name 

回答

2

你的基本查询是差不多吧。只需在您的filter呼叫中使用datetime__gte=datetime.datetime.today() -datetime.timedelta(days=number_of_days)而不是datetime=...。正如所写的,您要求的数据是在指定的天数前完成的,而不是从该天数到现在的数据。