Python django中没有意外的表单字段
我的项目中有这个django的forms.py文件Python django中没有意外的表单字段,python,django,django-forms,Python,Django,Django Forms,我的项目中有这个django的forms.py文件 from django import forms class DateInput(forms.DateTimeInput): input_type='date' class userRequest(forms.Form): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) lat_Origin = f
from django import forms
class DateInput(forms.DateTimeInput):
input_type='date'
class userRequest(forms.Form):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
lat_Origin = forms.FloatField(widget=forms.HiddenInput(attrs={"id":"lat_Origin"}),required=False,initial=181)
lon_Origin = forms.FloatField(widget=forms.HiddenInput(attrs={"id":"lon_Origin"}),required=False,initial=181)
lat_Dest = forms.FloatField(widget=forms.HiddenInput(attrs={"id":"lat_Dest"}),required=False,initial=181)
lon_Dest = forms.FloatField(widget=forms.HiddenInput(attrs={"id":"lon_Dest"}),required=False,initial=181)
origin_address=forms.CharField(max_length=200,widget=forms.TextInput(attrs={"class":"data_aux data","id":"origin_address"}))
destination_address=forms.CharField(max_length=200,widget=forms.TextInput(attrs={"class":"data_aux data","id":"destination_address"}))
我不知道为什么lat_Origin、lon_Origin、lat_Dest和lon_Dest在post方法中都没有
因为它们的初始值是181
在这里您可以看到以下视图:
def home(request):
blablaTrips={}
skyscannerTrips={}
trips_busTrain={}
if request.method == 'POST':
form = userRequest(request.POST)
if form.is_valid():
print((form.cleaned_data))
else:
form = userRequest()
在这里可以看到打印结果(form.cleaned_数据)
我也在javascript文件中编辑django的表单,但我得到了一个错误UncaughtTypeError:无法将属性“value”设置为null
function get_address_withLocation(lat, lng, map, is_origin) {
infoWindow = new google.maps.InfoWindow();
const geocoder = new google.maps.Geocoder();
const latlng = {
lat: lat,
lng: lng,
};
geocoder.geocode({ location: latlng }, (results, status) => {
if (status === "OK") {
if (results[0]) {
map.setZoom(7);
const marker = new google.maps.Marker({
position: latlng,
map: map,
});
contentString =
'<div id="content-map">' +
'<p>' + results[0].formatted_address + '</p>' +
"</div>";
infoWindow.setContent(contentString);
infoWindow.open(map, marker);
if (is_origin) {
document.getElementById('origin_address').value = results[0].formatted_address;
console.log(lat);
console.log(lng);
document.getElementById("lat_Origin").value = lat;
document.getElementById("lon_Origin").value = lng;
// document.getElementById("lat_Origin").value = 40;
// document.getElementById("lon_Origin").value = 2;
remove_mapMarkers('origin_address', marker)
} else {
console.log(lat);
console.log(lng);
document.getElementById('destination_address').value = results[0].formatted_address;
document.getElementById("lat_Dest").value = lat;
document.getElementById("lon_Dest").value = lng;
remove_mapMarkers('destination_address', marker);
}
} else {
window.alert("No results found");
}
} else {
window.alert("Geocoder failed due to: " + status);
}
});
}
函数获取带位置的地址(纬度、液化天然气、地图、原点){
infoWindow=new google.maps.infoWindow();
const geocoder=新的google.maps.geocoder();
常数={
拉特:拉特,
液化天然气:液化天然气,
};
geocoder.geocode({location:latlng},(结果,状态)=>{
如果(状态==“正常”){
如果(结果[0]){
map.setZoom(7);
const marker=new google.maps.marker({
位置:latlng,
地图:地图,
});
内容字符串=
'' +
“”+结果[0]。格式化的地址+””+
"";
setContent(contentString);
信息窗口。打开(地图、标记);
如果(是原产地){
document.getElementById('origin_address')。value=results[0]。格式化的_address;
控制台日志(lat);
控制台日志(lng);
document.getElementById(“lat_Origin”).value=lat;
document.getElementById(“lon_Origin”)。值=液化天然气;
//document.getElementById(“lat_Origin”)。值=40;
//document.getElementById(“lon_Origin”).value=2;
删除映射标记(“源地址”,标记)
}否则{
控制台日志(lat);
控制台日志(lng);
document.getElementById('destination_address')。value=results[0]。格式化的_address;
document.getElementById(“lat_Dest”).value=lat;
document.getElementById(“lon_Dest”)。值=液化天然气;
删除地图标记(“目的地地址”,标记);
}
}否则{
窗口警报(“未找到结果”);
}
}否则{
窗口警报(“地理编码器因“+状态”而失败);
}
});
}
由以下人员指定:
(…)这就是为什么仅为未绑定表单显示初始值的原因。对于绑定表单,HTML输出将使用绑定数据
因此,只有对于无绑定的表单(没有作为数据传递的request.POST
),它才会使用首字母
因此,您可以使用初始数据发出GET请求,如果用户不更改这些数据,并发出POST请求,那么这些初始数据将成为POST请求的一部分
def home(request):
blablaTrips={}
skyscannerTrips={}
trips_busTrain={}
if request.method == 'POST':
form = userRequest(request.POST)
if form.is_valid():
print((form.cleaned_data))
else:
# ↓ this form will work with the initial data
form = UserRequest()
return render(request, 'some-template.html', {'form': form})
def home(请求):
blablaTrips={}
skyscannerTrips={}
trips_busTrain={}
如果request.method==“POST”:
form=userRequest(request.POST)
如果form.is_有效():
打印((表格数据))
其他:
#&向下箭头;此表单将与初始数据一起使用
form=UserRequest()
返回render(请求'some template.html',{'form':form})
仅当您在模板中呈现html表单时才返回。因此,这些仅适用于未绑定的表单(因此没有请求.POST
数据)。我认为不适用,因为我试图在javascript文件中设置不同的值,并且我收到一个错误Uncaught TypeError:无法设置nullyes的属性“值”,如果使用AJAX调用,并且篡改数据,当然,有界形式将不包含初始值,而是null
。关键是它使用初始数据呈现表单,如果表单(正确)提交,初始值仍然是值,因此Django可以使用它,如果它使用request.POST
,构造表单。但是在form=UserRequest()中,我无法打印form.u数据。它给了我一个错误。在post方法中,我继续得到一个Nonevalue@andriuu99:这是用于GET请求的,以便在模板上呈现表单。之后,用户将提交表单,然后通过POST请求完成。然后,HTML将对所有表单字段的值进行正确编码,因此,如果这些字段没有更改,则采用字段的initial
值。@andriuu99:因此,您不应该检查UserRequest
的清理数据。这是为在HTML页面上呈现而构造的表单。然后,UserRequest(request.POST)
将分析由HTML表单触发的POST请求。但是在POST方法中,我仍然遇到yout解决方案的问题。我不知道为什么。我正在使用javascript文件和文档;给我一个错误:未捕获的TypeError:无法将属性“value”设置为null
def home(request):
blablaTrips={}
skyscannerTrips={}
trips_busTrain={}
if request.method == 'POST':
form = userRequest(request.POST)
if form.is_valid():
print((form.cleaned_data))
else:
# ↓ this form will work with the initial data
form = UserRequest()
return render(request, 'some-template.html', {'form': form})