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 не существует.

Вернуться на верх