Джанго группы, добавив несуществующие варианты - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть поле модели, содержащее варианты:

 db_redirection_choices = (('A', 'first'), ('B', 'second'))     

 redirection_type = models.CharField(max_length=256, choices=db_redirection_choices, blank=True, null=True)

В какой-то момент я выполняю группирование по этому столбцу, считая все существующие варианты:

results = stats.values('redirection_type').annotate(amount=Count('redirection_type')).order_by('redirection_type')

ОднакоДаст только результаты для выбора существ.Я хотел бы добавить те, которых нет даже с 0, к results

Например, если таблица содержит только запись

 Id   |   redirection_type
 --------------------------
  1   |    'A'

, тогда annotate вернетсятолько

 'A': 1

конечно, это нормально, но я все же хотел бы получить все несуществующие варианты в результатах:

 {'A': 1, 'B': 0}

Какой самый простой способ сделать это?

1 Ответ

0 голосов
/ 27 ноября 2018

Я не думаю, что есть простой способ сделать это с ORM, за исключением, может быть, использования условного выражения , но это, я думаю, сделает ваш запрос намного более сложным.

Почему бы не выполнить простую постобработку в Python?

db_redirection_choices = (('A', 'first'), ('B', 'second'))
# I think your queryset will have a similar shape
results = [{'redirection_type': 'A', 'amount': 1}]
results_map = {
    **{choice: 0 for choice, _display in db_redirection_choices},
    **{res['redirection_type']: res['amount'] for res in results}
}
assert results_map == {'A': 1, 'B': 0}

Если вам не требуется дополнительная обработка в ORM, это кажется самым простым.

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