Django: не удается определить начальные значения формы

#django #django-views #django-forms

Вопрос:

У меня есть следующая форма:

 class UpdateForm(forms.Form):


    name = forms.CharField(max_length = 15,
        widget=forms.TextInput(
            attrs={
                "class": "form-control",
                'required': True,
                'placeholder': 'Device name'

            }
        ))

    turn_server = forms.ChoiceField(
                    choices = TURN_CHOICES,
                    widget=forms.Select(
                        attrs={
                            "class": "form-control form-control-sm",
                        }
                    ))


    fps = forms.IntegerField(
                widget=forms.NumberInput(
                    attrs={
                        'id':'ex1',
                        'data-slider-id':'ex1Slider',
                        'type':"text",
                        'data-slider-min':"10",
                        'data-slider-max':"60",
                        'data-slider-step':"1",
                    }
                ))

    bitrate = forms.IntegerField(
                widget=forms.NumberInput(
                    attrs={
                        'id':'ex2',
                        'data-slider-id':'ex2Slider',
                        'type':"text",
                        'data-slider-min':"200",
                        'data-slider-max':"2000",
                        'data-slider-step':"1",
                    }
                ))

    class Meta:
        model = Device
        fields = ['name','fps','bitrate','turn_server']
 

для использования в шаблоне HTML:

 <form action="." method="POST">
  {% csrf_token %}

  {% for field in form %}
  <div class="form-group row{% if field.errors %} invalid{% endif %}">
    <label class="col-sm-3 col-form-label" for="{{ field.id_for_label }}">{{ field.label }}</label>
    <div class="col-sm-6">
      {{ field }}
      {% for error in field.errors %}
      <p class="help-block">{{ error }}</p>
      {% endfor %}
    </div>
  </div>
  {% endfor %}

    <button type="submit" class="btn btn-sm btn-light">Save</button>
</form>
 

и view.py :

 def control(request):
    template = 'template.html'
    context = {}
    context['form'] = UpdateForm(initial={
                                            'name': 'TestName',
                                            'fps': '45',
                                            'turn_server':'TestServer',
                                            'bitrate':'500'
                                            })
    return render(request, template, context)
 

По какой-то причине я не могу этого понять, форма, отображаемая в шаблоне, не отображается с начальными значениями, которые я определил initial . Например, полученный в результате fps входной html-элемент выглядит следующим образом:

 <input type="text" name="fps" value="10" id="ex1" data-slider-id="ex1Slider" data-slider-min="10" data-slider-max="60" data-slider-step="1" required="" data-value="10" style="display: none;">
 

Как ни странно, если я печатаю в views.py форме, которая передается в контекст, я получаю правильные данные формы (например value=45 ):

 <tr><th><label for="id_name">Name:</label></th><td><input type="text" name="name" value="TestName" class="form-control" required placeholder="Device name" maxlength="15" id="id_name"></td></tr>
<tr><th><label for="id_turn_server">Turn server:</label></th><td><select name="turn_server" class="form-control form-control-sm" id="id_turn_server">
  <option value="1">frankfurt</option>

  <option value="2">amsterdam</option>

  <option value="3">new_york</option>

</select></td></tr>
<tr><th><label for="ex1">Fps:</label></th><td><input type="text" name="fps" value="45" id="ex1" data-slider-id="ex1Slider" data-slider-min="10" data-slider-max="60" data-slider-step="1" required></td></tr>
<tr><th><label for="ex2">Bitrate:</label></th><td><input type="text" name="bitrate" value="500" id="ex2" data-slider-id="ex2Slider" data-slider-min="200" data-slider-max="2000" data-slider-step="1" required></td></tr>
 

Ответ №1:

Вы можете попытаться определить исходные данные из формы:

 name = forms.CharField(initial='Your name')
 

Взгляните на документацию здесь

Комментарии:

1. Спасибо, но мне нужно определить его динамически в views.py