Django - пользовательский виджет с подсказками "ты имел в виду", основанный на проверке - PullRequest
4 голосов
/ 27 января 2010

У меня есть базовая модель:

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

Теперь сценарий, который мне нужен:

  1. На сайте явведите значение в поле ввода "my_field" и нажмите кнопку "Отправить".
  2. Если значение проходит поиск, я должен автоматически выполнить действие формы.
  3. Если я получу несколько возможных значений, тогда я долженотображать их пользователю, и никакие другие действия не выполняются.
  4. Если я не получаю ответы (пустой список), я должен получить сообщение об ошибке.

Некоторые дополнительные требования:

  1. Я бы предпочел, чтобы список «Вы имели в виду» отображался без перезагрузки страницы.
  2. Если пользователь нажимает на одно из предложений, я хочу выполнить действие формы без дополнительного поиска - значение уже проверено.
  3. Я хочу оставить всю логику вне представления и сохранить ее в форме или в модели.Это необходимо.
  4. Я хочу избегать использования жестко закодированных js в шаблоне и вставлять их в форму, если это возможно.Это не обязательно.

Так что я предполагаю, что все это будет распределено между проверкой полей и пользовательским виджетом, который будет обрабатывать рендеринг списка "ты имел в виду".Я просто не могу собрать все это вместе.

Требуется ваша помощь:)

РЕДАКТИРОВАТЬ.Объявление.2 в требованиях. Это базовая функция, которую я описал.В более продвинутой форме я хочу, чтобы в этой форме было больше полей, и поэтому должен отображаться список «Вы имели в виду» вместе со всеми остальными ошибками полей (если они есть).Тогда нажатие на подсказку просто установит значение my_field в его значение без перезагрузки формы.Пользователь должен будет исправить и другие ошибки, поэтому я не могу сразу перейти к действиям формы.Может быть, есть какой-то флаг для переключения между этими двумя опциями («базовый» и «расширенный»).

1 Ответ

2 голосов
/ 27 января 2010
  1. Я бы предпочел, чтобы список "Вы имели в виду" отображался без необходимость перезагрузить страницу.

Создание пользовательского виджета, который отображает код JS для проверки возможных значений при вводе пользователем

  1. Если пользователь нажимает на одно из предложений, которые я хочу выполнить, действие формы без дополнительного поиск - значение уже было проверено.

Опять же, этот виджет при нажатии должен просто отправить форму.

  1. Я хочу оставить всю логику вне поля зрения и оставить ее в Форма или в модели. Это обязательно.

В форме у вас будет метод clean () для проверки всего. Если, скажем, некоторые поддельные данные проходят с submit из p. 2 - вы по-прежнему вызываете ошибку проверки.

  1. Я хочу избегать жестко закодированных js в шаблоне и вставлять их в форму, если возможный. Это не обязательно.

Решено с помощью пользовательского виджета, детали .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...