从 Django 中的 html 表单访问数据
Access data from html form in Django
我在应用程序中创建了一个如下所示的表单:
<form action="" style="max-width:500px;margin:auto">
<div class="input-container_sensor_form">
<div class="row">
<div class="col-6">
<input class="input_field_sensor_form" type="text" placeholder="Sensor name" name="sensor_name">
</div>
<div class="col-6">
<span class="text-center">
<select name="sensor_form_sensor_category" class="sensor_form_sensor_category" id="sensor_form_sensor_category" class="select2-hidden-accessible" aria-hidden="true" data-select2-id="sensor_form_sensor_category">
<option></option>
<option name="tree_sensor" >Tree Sensor</option>
<option name="weather_sensor" >Weather Station</option>
</select>
</span>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<input class="input_field_sensor_form" type="text" id="latitude" placeholder="Latitude" name="latitude">
</div>
<div class="col-6">
<input class="input_field_sensor_form" type="text" id="longitude" placeholder="Longitude" name="longitude">
</div>
</div>
</div>
<br>
<div id="map_sensor_form"></div>
<br>
<input type="hidden" id="field_id" name="field_id" value="">
<button type="submit" class="btn_sensor_form">Register</button>
</form>
采用以下形式:
class AddSensor(forms.Form):
sensor_name = forms.CharField(max_length=200 )
choice = forms.ChoiceField()
longitude = forms.DecimalField(max_digits=22, decimal_places=16)
latitude = forms.DecimalField(max_digits=22, decimal_places=16)
如何将输入与表单匹配?我在 django doc 中看到它通过标签引用它,但我没有。我想保持表格原样。
你可以利用form.cleaned_data
创建模型实例并从 form.cleaned_data
赋值
为了 form.is_valid()
工作,您可以确保 html 字段 ID 与 AddSensor
表单字段的 ID 相同。
例如:AddSensor
表单域 sensor_name
和 html id 为 sensor_name
的域
# views.py
from .models import YourModel # import model
from .forms import AddSensor # import form
def your_view(request):
if request.method == 'POST':
form = AddSensor(request.POST)
if form.is_valid():
form_data = form.cleaned_data
obj = YourModel()
obj.sensor_name = form_data.get("sensor_name")
# other fields
obj.save()
# return or redirect
else:
form = AddSensor()
return render(request, 'your_template.html', {'form': form})
在这里,不是使用 Django 表单呈现表单,而是使用与 Django 表单呈现的相同 ID 对表单进行硬编码。通过匹配硬编码 html 和 django 形式的 id,可以调用 form.is_valid()
。因此 form.cleaned_data
可以通过表单字段名称
访问
我在应用程序中创建了一个如下所示的表单:
<form action="" style="max-width:500px;margin:auto">
<div class="input-container_sensor_form">
<div class="row">
<div class="col-6">
<input class="input_field_sensor_form" type="text" placeholder="Sensor name" name="sensor_name">
</div>
<div class="col-6">
<span class="text-center">
<select name="sensor_form_sensor_category" class="sensor_form_sensor_category" id="sensor_form_sensor_category" class="select2-hidden-accessible" aria-hidden="true" data-select2-id="sensor_form_sensor_category">
<option></option>
<option name="tree_sensor" >Tree Sensor</option>
<option name="weather_sensor" >Weather Station</option>
</select>
</span>
</div>
</div>
</div>
<div class="row">
<div class="col-6">
<input class="input_field_sensor_form" type="text" id="latitude" placeholder="Latitude" name="latitude">
</div>
<div class="col-6">
<input class="input_field_sensor_form" type="text" id="longitude" placeholder="Longitude" name="longitude">
</div>
</div>
</div>
<br>
<div id="map_sensor_form"></div>
<br>
<input type="hidden" id="field_id" name="field_id" value="">
<button type="submit" class="btn_sensor_form">Register</button>
</form>
采用以下形式:
class AddSensor(forms.Form):
sensor_name = forms.CharField(max_length=200 )
choice = forms.ChoiceField()
longitude = forms.DecimalField(max_digits=22, decimal_places=16)
latitude = forms.DecimalField(max_digits=22, decimal_places=16)
如何将输入与表单匹配?我在 django doc 中看到它通过标签引用它,但我没有。我想保持表格原样。
你可以利用form.cleaned_data
创建模型实例并从 form.cleaned_data
为了 form.is_valid()
工作,您可以确保 html 字段 ID 与 AddSensor
表单字段的 ID 相同。
例如:AddSensor
表单域 sensor_name
和 html id 为 sensor_name
# views.py
from .models import YourModel # import model
from .forms import AddSensor # import form
def your_view(request):
if request.method == 'POST':
form = AddSensor(request.POST)
if form.is_valid():
form_data = form.cleaned_data
obj = YourModel()
obj.sensor_name = form_data.get("sensor_name")
# other fields
obj.save()
# return or redirect
else:
form = AddSensor()
return render(request, 'your_template.html', {'form': form})
在这里,不是使用 Django 表单呈现表单,而是使用与 Django 表单呈现的相同 ID 对表单进行硬编码。通过匹配硬编码 html 和 django 形式的 id,可以调用 form.is_valid()
。因此 form.cleaned_data
可以通过表单字段名称