Возврат ежедневного значения продаж за текущий месяц в Django
С помощью приведенной ниже модели я хочу создать функцию, которая возвращает детали ежедневных продаж за текущий месяц. Детали будут представлять собой общее количество продаж за каждый день и сумму продаж за каждый день. Я пробовал использовать ExtractDay и annotate, но не получаю желаемого результата или, возможно, я делаю это неправильно
class Stamping(models.Model):
created = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
class Order(Stamping):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=300, unique=True)
price = models.FloatField()
quantity = models.IntegerField()
В моем местоположении дата - вторник, 2 ноября 2021 года. Таким образом, вывод должен выглядеть следующим образом
<QuerySet [{'day': 1, 'count': 9, 'total': 100.0}, {'day': 2, 'count': 7, 'total': 80.0}]>
И после сегодняшнего дня я должен также {'day': 3, 'count': 15, 'total': 200.0}
и это продолжается до конца месяца, тогда я начну получать данные только за этот месяц
Свяжите модель заказа с моделью штамповки
Измените созданное поле штампа с DateTimr на DateFirld Используйте сельдерей для создания нового объекта штампа в 00:00 каждого нового дня с созданным полем, равным сегодняшней дате. Таким образом, при создании объекта заказа просто получите объект штампа с сегодняшней датой. И когда вы захотите, просто сделайте api для возврата связанных заказов с сегодняшним объектом штамповки, используя связанное имя, указанное в поле внешнего ключа, соединяющего заказ с штамповкой
Ниже приведенный код создает набор запросов, беря атрибуты, которые вы хотите, с помощью поиска, он выдаст отдельные данные дня, количества и общего значения, после чего query_set store создаст или сохранит их, как вы хотите
вы можете добавить их в одну модель и вызывать их по фильтру из filter
views.py
from django.db.models import Q
def get_queryset(self):
qlookup1 = Q(day=self.request.value)
qlookup2 = Q(count=self.request.value)
qlookup3 = Q(total=self.request.value)
queryset = model.objects.filter(qlookup1 | qlookup2 | qlookup3).distinct()
active = self.request.query_params.get('active', True)
try:
queryset = queryset.filter(is_active=active)
return queryset
except Exception as error:
return queryset.none()
если вам нужен плоский форматный кверисет, то вы можете использовать drf_multiple_model