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()])
Другие вопросы по тегам