Как передать переменную переключателю формы в Django? - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть форма (код ниже), которая берет ответы в модель ответа.Ответы всегда в масштабе 1-3, но могут ссылаться на различные вопросы.

form.py

from Django import forms
RESPONSE_CHOICES = (
   ('1', '1. Happy'),
   ('2', '2. Neutral'),
   ('3', '3. Sad'),
)
class ResponseForm(forms.Form):
    quid = forms.IntegerField()
    response = forms.ChoiceField(choices=RESPONSE_CHOICES, widget=forms.RadioSelect())

quid - это внешний ключ для ID в модели question.

в template.html У меня есть:

<form action="" method="post">
  {% csrf_token %}
  {{ form }}

  <input type="submit" />
</form>

Есть ли способ, которым я могу установить значение quid в переключателях моего шаблона формы, отображая что-то вроде этого:

    <label>1</label>
    <input type="radio" value="1" name="{{ question.id }}">
    <label>2</label>
    <input type="radio" value="2" name="{{ question.id }}">
    <label>3</label>
    <input type="radio" value="3" name="{{ question.id }}">

1 Ответ

0 голосов
/ 30 сентября 2018

Вы можете установить значения формы при инициализации и сделать что-то вроде этого:

class ResponseForm(forms.Form):
    quid = forms.IntegerField()
    response = forms.ChoiceField(choices=RESPONSE_CHOICES, widget=forms.RadioSelect())

    def __init__(self, *args, **kwargs):
        super(ResponseForm, self).__init__( *args, **kwargs)
        field_value=Question.objects.get(id=kwargs["id"]).response
        self.fields['response'].initial = field_value

Обратите внимание, что это предполагает, что вы создаете форму с параметром id.

form = ResponseForm(id=quid)#quid is the relevant id

У вас также должен быть план для пустой формы.

Однако мои рекомендации будут такими:

  • использовать Foreignkey вмодель вашего вопроса вместо целочисленного идентификатора, который облегчит вашу жизнь.

  • используйте форму модели вместо формы, которая сделает все выше автоматизированное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...