Как аннотировать атрибут на основе некоторых атрибутов, которые находятся в нескольких строках таблицы - django ORM - PullRequest
0 голосов
/ 01 мая 2020

У меня есть модель

class Model(BaseModel):
    status = models.CharField(verbose_name='Status', max_length=255,null=True, blank=True)
    category = models.CharField(verbose_name='Service Category', max_length=255,null=True, blank=True)
    order_no = models.CharField(verbose_name='Order No', max_length=255, null=True, blank=True)
    item = models.CharField(verbose_name='Item', max_length=255,null=True, blank=True)
    operation_date = TimestampField(auto_now_add=False,null=True, blank=True)
    user_name = models.CharField(verbose_name='User Name', max_length=255,null=True, blank=True)
    service_status = models.CharField(verbose_name='Service Status', max_length=255,null=True, blank=True)
    status_message = models.TextField(verbose_name='Status Message', max_length=255,null=True, blank=True)

В этой таблице выше я хочу вычислить категорию, общий объем заказа, тип заказа.

Но проблема заключается в том, что значения типа order_type отсутствуют в таблице выше ... нам придется рассчитывать вручную.

Пусть, если один Номер заказа равен 202025, и он находится в двух категориях, таких как cat1, cat2, мы говорим, что order_type равен Composite * 1011. * иначе это будет один

ex:

 Order No    category
| 280436   | cat1 |
| 280436   | cat2 |
| 280435   | cat1 |
| 280435   | cat3 |
| 280435   | cat4 |
| 280434   | cat1  |

, тогда мы говорим, что Заказы № 280436 и 280435 являются составными заказами.

ТАК выход должно выглядеть так:

Category   order type   total order  total success orders
cat1        single         10               8
cat2        composite      8                5  

Как мы можем смоделировать запрос Django для требуемого вывода?

Approche1

queryset = Model.objects.values('category', 'order_type').annotate(
            total_orders=Count('order_type'), total_success_order=Count('service_status', filter=Q(service_status='success'))).order_by()

Но Как получить Тип заказа ???

Можете ли вы, ребята, предложить какие-либо решения?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...