Skip to main content
 首页 » 编程设计

Python Django 从 DateField 按月获取不同的查询集

2024年09月07日30emanlee

class MyModel(models.Model): 
    TRANSACTION_TYPE_CHOICES = ( 
        ('p', 'P'), 
        ('c', 'C'), 
    ) 
    status = models.CharField(max_length=50, choices=TRANSACTION_TYPE_CHOICES, default='c') 
    user = models.ForeignKey(User, db_index=True, on_delete=models.CASCADE,related_name='user_wallet') 
    date = models.DateField(auto_now=True) 
    amount = models.FloatField(null=True, blank=True) 
 
 
    def __unicode__(self): 
        return str(self.id) 

我是 Python django 的初学者,对 Django Rest Framework 有一点了解。

我有一个像上面这样的模型,我想按月过滤日期字段并按月获取不同的查询集......是否有任何默认方法可以做到这一点......

提前致谢

请您参考如下方法:

你可以使用TruncMonth与 annotations

from django.db.models.functions import TruncMonth 
 
MyModel.objects.annotate( 
    month=TruncMonth('date') 
).filter(month=YOURVALUE).values('month').distinct() 

或者如果您只需要按月过滤日期,您可以使用 __month选项

MyModel.objects.filter(date__month=YOURVALUE).distinct() 

旧的 django 你可以使用 extra , postgres 的例子

MyModel.objects.extra( 
    select={'month': "EXTRACT(month FROM date)"}, 
    where=["EXTRACT(month FROM date)=%s"], 
    params=[5] 
    # CHANGE 5 on you value 
    ).values('month').distinct()