Django заполняет поле form.ChoiceField из набора запросов и связывает выбор с объектом модели
У меня есть простая форма:
class SubmissionQuickReplyForm(forms.Form):
comment_text = forms.CharField(label='', required=False, widget=forms.Textarea(attrs={'rows':2}))
Я хочу добавить form.ChoiceField к форме, где параметры в ChoiceField заполняются из набора запросов.
class SubmissionQuickReplyForm(forms.Form):
comment_text = forms.CharField(label='', required=False, widget=forms.Textarea(attrs={'rows':2}))
choice = forms.ChoiceField(...)
Например, если у меня есть:
q = MyChoices.Objects.all()
Как я могу заполнить ChoiceField содержимым q, чтобы, обрабатывая результаты формы в моем представлении, я мог вернуть объект в конце?
if request.method == "POST":
form = SubmissionQuickReplyForm(request.POST)
if form.is_valid():
ch = get_object_or_404(MyChoices, pk=?)
# How do I get my object from the choice form field?
2 ответа
Решение
Вместо этого вы можете использовать ModelChoiceField.
choice = forms.ModelChoiceField(queryset=MyChoices.Objects.all())
И вы можете получить, просто позвонив cleaned_data
как это.
if request.method == "POST":
form = SubmissionQuickReplyForm(request.POST)
if form.is_valid():
ch = form.cleaned_data.get('choice')
Для ChoiceField вы можете использовать
choice = forms.ChoiceField(choices=[
(choice.pk, choice) for choice in MyChoices.objects.all()])