Если я правильно читаю ваш вопрос, это довольно распространенный вариант использования и хорошо поддерживается формами 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: Динамические начальные значения