2013-06-26 1 views
0

Мне нужно добавить пустое значение выбора в существующий valuelistqueryset для ниже поля выбора в моей форме в Django similat до modelchoicefield("-------------"). Кто-нибудь может мне с этим помочь?Нужно добавить пустой выбор в существующий valuelistqueryset для django choicefield

hardness = forms.ModelChoiceField(queryset=Description.objects.filter(variable="hardness", paradigm='206209').values_list('dvalue', flat=True).distinct().order_by('dvalue')) 

@jghyllebert Спасибо за ваш ответ. Но в этом случае мне нужно преобразовать modelchoicefield в поле выбора. И мне нужно решение для choicefield. Извините, если я не был в курсе. Я попробовал empty_label и empty_value в поле выбора, но форма идет с ошибкой.

rimplan = forms.ChoiceField (required = False, empty_value = '---', choice = Описание.objects.filter (variable = "rimplan", paradigm = '206209'). Values_list ('dvalue', flat = True) .distinct(). Order_by ('dvalue'))

Таким образом, я реализовал это решение, которое отлично работает.

EXTSURCOLOR_DESCRIPTIONS = Description.objects.filter (переменная = "exteriorsurfacecolor", парадигма = '206209') EXTSURCOLOR_CHOICES = [('', '---')] EXTSURCOLOR_CHOICES.extend (EXTSURCOLOR_DESCRIPTIONS.values_list ("dvalue" , "dvalue"). distinct(). order_by ('dvalue')) exteriorsurfacecolor = forms.ChoiceField (выбор = EXTSURCOLOR_CHOICES)

Я просто хотел знать, есть ли лучшее решение там.

+0

Есть ли что-то о пустом значении, которое будет отображаться, если вы установите 'required = False', который не работает для вас? Вы не можете буквально вставить его в набор запросов, но он добавит его к вариантам, предлагаемым для этого поля. –

ответ

0

Существует опция empty_label, которую вы можете использовать для установки пользовательского значения для опции пустого выбора.

hardness = forms.ModelChoiceField(
    queryset=Description.objects.filter(variable="hardness", paradigm='206209').values_list('dvalue', flat=True).distinct().order_by('dvalue'), 
    empty_label='Not applicable', #for instance 
    required=False 
) 

После Docs:

Обратите внимание, что если ModelChoiceField требуется и имеет начальное значение по умолчанию, не пустой выбор не создается (независимо от значения empty_label).

+0

@jghyllebert Спасибо за ваш ответ. Но в этом случае мне нужно преобразовать modelchoicefield в поле выбора. И мне нужно решение для choicefield. Извините, если я не был в курсе. Я попробовал empty_label и empty_value в поле выбора, но форма идет с ошибкой. rimplan = forms.ChoiceField (required = False, empty_value = '---', choice = Описание.objects.filter (variable = "rimplan", paradigm = '206209'). Values_list ('dvalue', flat = True) .distinct(). order_by ('dvalue')) – user1908622

+0

Таким образом, я реализовал это решение, которое отлично работает. EXTSURCOLOR_DESCRIPTIONS = Description.objects.filter (переменная = "exteriorsurfacecolor", парадигма = '206209') EXTSURCOLOR_CHOICES = [('', '---')] EXTSURCOLOR_CHOICES.extend (EXTSURCOLOR_DESCRIPTIONS.values_list ("dvalue", «dvalue»). distinct(). order_by ('dvalue')) exteriorsurfacecolor = forms.ChoiceField (выбор = EXTSURCOLOR_CHOICES) Я просто хотел знать, есть ли лучшее решение там. – user1908622

+0

может разместить этот код в своем вопросе? Трудно читать сейчас. –