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有点了解。

我有一个像上面的模型,我想按月过滤日期字段,并按月获取不同的查询集.....是否有任何默认方法可以执行此操作...

提前致谢

最佳答案

您可以将TruncMonthannotations一起使用

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()

08-07 16:38