Textinput с ModelChoiceField
Вчера я задал этот вопрос без успеха, но я все еще работаю над проблемой. Сохранить пользовательский ввод, который является строкой, как объект в db. . Вкратце, вчерашний вопрос описывал, как я хочу иметь регистрационный ключ в моей регистрационной форме, чтобы иметь возможность ограничить, кто может зарегистрировать себя.
Сейчас я создал в файле forms.py ключевое поле как ModelChoiceField с textinput в качестве виджета. Когда я пишу ключ, который существует в БД, я получаю следующую ошибку: "Выберите правильный выбор. Этот выбор не является одним из доступных вариантов". Я не могу использовать Select в качестве виджета, так как это отобразит ключи для пользователей
Я попробовал оба метода в этом посте, но безуспешно.
Итак, вопрос в том, как я могу иметь TextInput с ModelChoiceField?
Получите строку от пользователя через форму с полем CharField. Предполагая, что вы используете CBV FormView, выполните работу в методе form_valid. Что-то вроде:
def form_valid( self, form):
key = form.cleaned_data['key']
try:
keyobj = Keything.objects.get( key=key)
# it's valid. do whatever.
return super().form_valid( form)
except Keything.DoesNotExist:
form.add_error( key, 'This is not a valid key')
return super().form_invalid( form)
В качестве альтернативы вы можете иметь валидатор на поле key формы, который поднимает вопрос ValidationError, если объект Keything не существует.