2015-04-28 6 views
1

Я пытаюсь отобразить карту своих данных на основе поиска. Самый простой способ справиться с отображением карты - это сериализовать запрос, сгенерированный поиском, и действительно, это работает отлично. Тем не менее, я бы очень хотел разрешить несколько запросов, причем отображаемые точки отображались в выбранном пользователем цвете. Выбранный пользователем цвет, очевидно, не может поступать из базы данных, поскольку он не является свойством этих объектов, поэтому ни один из агрегаторов здесь не имеет смысла.Django: Добавить произвольные дополнительные данные в набор запросов

Я пробовал просто сделать класс утилиты, так как мне действительно нужно несколько сложное соединение между двумя классами моделей, которое затем сериализуется в geojson. Однако, как только я создал этот класс утилиты, стало очевидно, что я потерял много преимуществ от наличия набора запросов, особенно возможность легко сериализовать данные с помощью django-geojson (или изначально, когда я смогу запустить 1.8 для бесперебойной работы).

В принципе, я хочу, чтобы иметь возможность сделать что-то вроде:

QuerySet = datumClass.objects.filter (... представлены параметры поиска ... пользователь) аннотирования (цвет = 'синий').

Возможно ли это вообще? Похоже, это было бы более элегантно и будет работать лучше, чем мое текущее решение немодельного класса утилит, которое имеет серьезные проблемы с сериализацией, когда я пытаюсь использовать python-geojson для сериализации.

+1

У меня немного трудно понять ваш случай использования, но не будет ли это работа для '.extra (цвет =«синий»)'? –

ответ

0

, если у вас есть словарь, который отображает поля до значений, вы можете делать такие вещи, как

filter_dictionary = { 
    'date__lte' : '2014-03-01' 
} 
qs = DatumClass.objects.filter(**filter_dictionary) 

qs И будет иметь все даты меньше, чем эта дата (если она имеет date поля). Поэтому, как пользователь, я мог бы представить любые пары ключей и значений, которые вы могли бы разместить в своем словаре.

1

Не совсем уверен, чего вы пытаетесь достичь, но вы можете добавить дополнительные атрибуты к вашим объектам, итерации по запросу в. К ним можно получить доступ из шаблона.

for object in queryset : 
    if object.contition = 'a' 
     object.color = 'blue' 
    else: 
     object.color = 'green' 
0

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

.extra(select={'color': "'blue'"}) 

Обратите внимание на двойные кавычки оберточной значение строки.

Это приводит к:

SELECT ('blue') AS "color" 
Смежные вопросы