2015-04-08 7 views
3

Я использую Select2 в своем приложении для создания выпадающих списков, похожих на теги. Пользователи могут выбрать количество предопределенных тегов или создать новый тег.Разрешить динамический выбор в Django ChoiceField

Соответствующие формы класса часть:

all_tags = Tag.objects.values_list('id', 'word') 

    # Tags 
    tags = forms.ChoiceField(
     choices=all_tags, 
     widget=forms.Select(
      attrs={ 
       'class': 'question-tags', 
       'multiple': 'multiple', 
      } 
     ) 
    ) 

Проблема заключается в том, что Djangoне позволит пользовательские теги (выбор) После проверки. Там ошибка, которую я получаю, выглядит примерно так: Select a valid choice. banana is not one of the available choices.

Есть ли какой-нибудь способ?

Благодаря

+0

отправить запрос ajax на создание тегов (перед отправкой), чтобы сохранить новый тег? – skndstry

+0

Используете ли вы 'django-select2' (или одно из многих приложений Django для работы с Select2)? –

+0

@skndstry не уверен, что это лучший способ – intelis

ответ

1

Я изменил бы choicefield к CharField, и использовать чистый метод для фильтрации нежелательных вариантов в зависимости от определенных условий. Простое изменение его в поле char с помощью выбранного виджета будет работать, так как Select2 - это javascript.

class Myform(forms.Form): 
    tags = forms.CharField(
    max_length=254, 
    widget=forms.Select(
     choices=tags, # here we set choices as part of the select widget 
     attrs={ 
      'class': 'question-tags', 
      'multiple': 'multiple', 
      } 
     ) 
    ) 
    def clean_tags(self): 
     tags = self.cleaned_data['tags'] 
     # more tag cleaning logic here 
     return tags 
+0

Это супер хорошо! –

Смежные вопросы