2014-10-21 16 views
0

VM 분석 데이터를 보유하는 테이블이 있는데, 데이터를 입력 할 때마다 타임 스탬프가 삽입됩니다. 데이터는 매 시간마다 입력되고 30 일 표시에서 잘립니다. 나는 고객의 게시 된 정수를 기반으로 주어진 일수를 검색하기 위해 장고 쿼리를 작성해야한다.Django 날짜 범위 쿼리

따라서 고객은 7을 제출하고 Django 쿼리는 지난 7 일 데이터를 반환합니다. 나는 날짜에 대한 문서를 조사하고 있었지만 그것이 원하는대로 할 수없는 것 같습니다.

나는 여기, 장고와 함께 할 수있는 곳이라 할지라도 도움이 필요하다.

이 내 현재 쿼리입니다 :

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

베이스 쿼리가 거의 권리입니다. datetime=... 대신 filter 통화에서 datetime__gte=datetime.datetime.today() -datetime.timedelta(days=number_of_days)을 사용하면됩니다. 서면에 따르면, 지정한 일 수 전에 데이터가 타임 스탬프로 저장되고 현재까지의 날짜 수는 표시되지 않습니다.