Если вы создаете экземпляр модели конференции с вашей формой, вы должны рассмотреть возможность использования Django's ModelForm
, который предназначен для использования в создании и редактировании экземпляров модели.
В любом случае вы можете использовать ModelMultipleChoiceField
, чтобы служить своей цели, а это просто MultipleChoiceField
с поддержкой запроса. Вы можете использовать это поле либо в стандарте Form
, либо в ModelForm
.
Чтобы настроить выбор на основе запроса, вы можете установить запрос в своем представлении.
Например:
forms.py
class CreateConferenceForm(forms.Form):
# An initial queryset is required, this is overwritten in the view
participants = forms.ModelMultipleChoiceField(Person.objects.all())
views.py
def new_conference(request):
data = request.POST if request.method == 'POST' else None
conference_form = CreateConferenceForm(data=data)
conference_form.fields['participants'].queryset = my_person.friends.all()
if data:
if conference_form.is_valid():
# etc
return render...
Обратите внимание, что это важно для вас, чтобы установить QuerySet перед вызовом is_valid
на форме, так как запрос используется в валидации и перед отправкой передачи формы в шаблон, поскольку набор запросов используется для генерации показанных вариантов.
Вы уверены, что хотите использовать обычную форму вместо 'ModelForm'? –
Как вы получаете экземпляр 'Person'? Это действующий пользователь или есть ли другое поле для этого? – 4140tm
Человек - действующий пользователь - да. Я не уверен, что использую обычную форму из-за большей гибкости, чем ModelForm, но теперь я решил использовать ModelForm, это действительно подходит для моих целей, спасибо! –