Заполнение поля формы на основе коэффициента запроса / слаг - PullRequest
0 голосов
/ 04 апреля 2009

Я видел несколько похожих вопросов, но ничто так не указывало мне направление, на которое я надеялся. У меня есть ситуация, когда у меня есть стандартная форма Django, построенная из модели. Эта форма имеет выпадающий список, в котором вы выбираете элемент, к которому вы хотите оставить комментарий. Теперь я хотел бы, чтобы люди могли просматривать элементы и нажимать на ссылку, чтобы прокомментировать этот конкретный элемент. Я хотел бы, чтобы, когда пользователь щелкает по этой ссылке, он получал ту же старую форму, однако в раскрывающемся списке по умолчанию будет отображаться элемент, который он хочет прокомментировать.

Есть ли вменяемый способ сделать это с существующей формой? Должен ли я создать отдельную форму полностью для этого?

Как примечание, это не настоящая система комментариев, и она не предназначена для этого. У меня была идея создать URL-адреса вроде:

comment/?q=item1

Поймать раздел 'item1', а затем перехватить функцию сохранения, чтобы принудительно ввести это в форму, скрывая при этом компанию в форме. С точки зрения пользовательского интерфейса, я не в восторге от этой идеи. Есть мысли или идеи?

1 Ответ

1 голос
/ 04 апреля 2009

Если я правильно читаю ваш вопрос, это довольно распространенный вариант использования и хорошо поддерживается формами django. Вы можете использовать одну и ту же форму для обоих описанных вами сценариев.

Допустим, у комментируемого элемента есть первичный ключ 5. Вы должны создать ссылку, по которой пользователь должен щелкнуть, с URL-адресом, который выглядит следующим образом:

<a href="/comment/5/">Comment on me</a>

(Это также будет работать с полем слагов, хотя см. Комментарий ниже о том, как идентификатор должен совпадать с идентификатором в полях выбора: / comment / my_item_1 /)

Ваше представление выберет параметр и передаст его форме в параметре initial:

def show_comment_form(request, item_id):
    form = MyCommentForm(initial={'item_drop_down':item_id})

Форма будет отображаться с предварительно выбранным раскрывающимся списком. Конечно, чтобы этот пример работал, параметр item_id должен совпадать с любым идентификатором выбора для поля элемента (если он создается автоматически из поля модели, как это звучит, это, вероятно, будет первичным ключом доступных элементов). 'класс).

Под этим я подразумеваю, что если бы выбор выглядел так:

choices = ( (1, 'Item 1'),
            (2, 'Item 2') )

Тогда item_id должно быть 1 или 2, поскольку это будет то, что будет в результирующих опциях <select> (то есть: <option value="1">Item 1</option>). Автоматически созданные классы ModelForm позаботятся об этом за вас, в противном случае просто будьте бдительны.

Более подробную информацию вы можете найти в документации по django: Динамические начальные значения

...