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
有一点了解。
我有一个像上面这样的模型,我希望按月过滤日期字段,并按月获得不同的查询集.....有没有默认的方法来执行此操作...
提前致谢
答案 0 :(得分:2)
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()
答案 1 :(得分:0)
这可能对您有所帮助
MyModel.object.values('col1','col2',...,'date').distinct('date')
或试试这个:
from django.db.models.functions import TruncMonth
MyModel.objects
.annotate(month=TruncMonth('date')) # Truncate to month and add to select list
.values('month') # Group By month
.annotate(c=Count('id')) # Select the count of the grouping
.values('month', 'c') # (might be redundant, haven't tested) select month and count