Python Django получает различный набор запросов по месяцам из DateField - PullRequest
0 голосов
/ 29 мая 2018
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.

У меня есть модель, подобная выше, и я хочу отфильтровать поле даты по месяцам и получить отдельный набор запросовпо месяцам ..... Есть ли способ сделать это по умолчанию ...

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

вы можете использовать TruncMonth с аннотациями

from django.db.models.functions import TruncMonth

MyModel.objects.annotate(
    month=TruncMonth('date')
).filter(month=YOURVALUE).values('month').distinct()

или, если вам нужна только фильтрация даты по месяцу, вы можете использовать __ month option

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()
0 голосов
/ 29 мая 2018

Это может помочь вам

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...