Django Distinct для набора запросов в forms.py - PullRequest
1 голос
/ 30 марта 2010

Я пытаюсь получить список с отчетливыми формами, например:

forms.ModelMultipleChoiceField (queryset = Events.objects.values ​​('hostname'), обязательный = False) .distinct ()

В оболочке python эта команда работает отлично, но при попытке ее в form.py оставляет пустую форму, поэтому ничего не появляется. Когда я просто делаю Events.objects.all (), появляется форма, но она не работает с Events.objects.all () ... я также пробовал values_list и т. Д., Но, похоже, не вписывается в формы ... Кто-нибудь понял, как получить SELECT DISTINCT в ModelMultipleChoiceField?

Я прочитал некоторые другие вопросы по этому поводу в stackoverflow, но, похоже, со мной ничего не получается, так что, надеюсь, кто-то знает, как это сделать в forms.py.

Заранее

1 Ответ

0 голосов
/ 30 марта 2010

Для ModelMultipleChoiceField, Django ожидает объект модели - потому что он хранит значение первичного ключа выбранного элемента. Другими словами, он предназначен для управления полями ManyToMany.

Звучит так, как будто вы хотите сохранить фактическое строковое значение, так что это может быть неправильным выбором для вас. Возможно, вы захотите использовать стандартный MultipleChoiceField и переопределить метод __init__ формы, чтобы установить атрибут choices поля. Помните, что любое поле выбора представляет собой набор из двух кортежей, каждое из которых содержит значение в дБ и отображаемое значение, поэтому даже если вы хотите, чтобы они были одинаковыми, вам нужно будет включить значение дважды:

def __init__(self, *args, **kwargs):
    super(MyFormClass, self).__init__(*args, **kwargs)
    self.fields['mychoicefield'].choices = [(x[0], x[0]) for x in
                               Event.objects.values_list('hostname').distinct()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...