2015-07-23 3 views
0

Так что я использую django с mysql, и у меня есть модель MyModel, которая содержит некоторые элементы с None на поле region. Когда я запускаю это:django count a field, но группа другим

results = MyModel.objects.all()\ 
     .values('region')\ 
     .annotate(total=Count('region')) 

она возвращает правильно группировку, но один {'None': 0}, что неправильно, потому что есть некоторые элементы с region полем, равным None.

Теперь, если бы я использовал mysql, то я мог группе это с:

select region, count(id) from model_table group by region; 

который возвращает решение, которое я хочу | NULL | 5 |.

Как я могу достичь этого из django?

ответ

1

Вы уже написали ответ в своем вопросе. Насколько я знаю, COUNT в SQL исключает определенные значения false, такие как NULL. Поэтому, если вы хотите также подсчитать значения falsey, вы используете другое поле для выполнения агрегата, как и в вашем SQL-заявлении, где вы использовали поле «id». В этой заметке все, что вам нужно сделать, - выполнить COUNT на 'id'. Измените код на что-то вроде этого:

results = MyModel.objects.all()\ 
    .values('region')\ 
    .annotate(total=Count('id')) 
+0

omg, вы совершенно правы, я не думал, что это был путь, но да, это было так просто. Благодарю. – eLRuLL