Django 日期范围查询

0 投票
1 回答
669 浏览
提问于 2025-04-28 21:58

我有一个表格,用来存储虚拟机的分析数据,每次数据被输入时都会记录一个时间戳。这些数据每小时输入一次,并且在30天后会被清除。我需要写一个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   
暂无标签

1 个回答

2

你的基本查询几乎是对的。只需要在你的 filter 调用中使用 datetime__gte=datetime.datetime.today() -datetime.timedelta(days=number_of_days),而不是 datetime=...。这样写的话,你是在请求恰好在指定天数之前的数据,而不是从那天起到现在的所有数据。

撰写回答