У меня есть базовая модель:
class MyModel(models.Model):
my_field = models.CharField()
У меня есть базовая форма для этой модели:
class MyFrom(forms.ModelForm):
class Meta:
model = MyModel
И у меня есть функция, которая выполняет основной поиск (гораздо большесложный в реальности, регулярные выражения и т. д. не подойдут):
POSSIBLE_VALUES = ['aa', 'bb', 'cc', 'dd']
def lookup(some_value):
if some_value in POSSIBLE_VALUES:
# the value is OK, return a string
return some_value
else:
# constructs the 'did you mean' list of suggestions
didyoumean = [pv for pv in POSSIBLE_VALUES if pv in some_value]
# returns a list which might be empty
return didyoumean
Теперь сценарий, который мне нужен:
- На сайте явведите значение в поле ввода "my_field" и нажмите кнопку "Отправить".
- Если значение проходит поиск, я должен автоматически выполнить действие формы.
- Если я получу несколько возможных значений, тогда я долженотображать их пользователю, и никакие другие действия не выполняются.
- Если я не получаю ответы (пустой список), я должен получить сообщение об ошибке.
Некоторые дополнительные требования:
- Я бы предпочел, чтобы список «Вы имели в виду» отображался без перезагрузки страницы.
- Если пользователь нажимает на одно из предложений, я хочу выполнить действие формы без дополнительного поиска - значение уже проверено.
- Я хочу оставить всю логику вне представления и сохранить ее в форме или в модели.Это необходимо.
- Я хочу избегать использования жестко закодированных js в шаблоне и вставлять их в форму, если это возможно.Это не обязательно.
Так что я предполагаю, что все это будет распределено между проверкой полей и пользовательским виджетом, который будет обрабатывать рендеринг списка "ты имел в виду".Я просто не могу собрать все это вместе.
Требуется ваша помощь:)
РЕДАКТИРОВАТЬ.Объявление.2 в требованиях. Это базовая функция, которую я описал.В более продвинутой форме я хочу, чтобы в этой форме было больше полей, и поэтому должен отображаться список «Вы имели в виду» вместе со всеми остальными ошибками полей (если они есть).Тогда нажатие на подсказку просто установит значение my_field в его значение без перезагрузки формы.Пользователь должен будет исправить и другие ошибки, поэтому я не могу сразу перейти к действиям формы.Может быть, есть какой-то флаг для переключения между этими двумя опциями («базовый» и «расширенный»).