#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