Django:动态 ModelchoiceField 不保存
Django: dynamic ModelchoiceField not saving
我有以下模型 ChoiceFIeld
class ad(ModelForm):
REGION = forms.ModelChoiceField(queryset = REGION.objects.all())
CITY = forms.ModelChoiceField(queryset = CITY.objects.all())
ZIP = forms.ModelChoiceField(queryset = ZIP.objects.all())
class Meta:
model = myinfo
fields = ('REGION', 'CITY', 'ZIP',)
CITY
和 ZIP
由 javascript 动态填充,我在保存时遇到问题,因为 form.is_valid
返回 false,因此不会保存,除非我删除CITY
和 ZIP
,我做错了什么?
我的看法
def index(request):
city = CITY.objects.all()
zip = ZIP.objects.all()
form = ad(request.POST)
if request.method == 'POST':
if form.is_valid():
form.save()
else:
form = ad()
return render(request, 'dynamic/sample.html', {'adform':form, 'city': city, 'zip': zip,})
我的javascript
<script>
$(document).ready(function() {
function removeOptions(selectbox)
{
var i;
for(i=selectbox.options.length-1;i>=0;i--)
{
selectbox.remove(i);
}
}
removeOptions(document.getElementById("id_CITY"));
removeOptions(document.getElementById("id_ZIP"));
$("#id_CITY").append("<option value=\"\" selected=\"selected\">---------</option>");
$("#id_ZIP").append("<option value=\"\" selected=\"selected\">---------</option>");
});
</script>
<script>
$(document).ready(function() {
$("#id_REGION").change(function() {
var el = $(this);
function removeOptions(selectbox)
{
var i;
for(i=selectbox.options.length-1;i>=0;i--)
{
selectbox.remove(i);
}
}
removeOptions(document.getElementById("id_CITY"));
removeOptions(document.getElementById("id_ZIP"));
$("#id_CITY").append("<option value=\"\" selected=\"selected\">---------</option>");
$("#id_ZIP").append("<option value=\"\" selected=\"selected\">---------</option>");
var reg = [{% for item in city %}"{{ item.reg_id }}"{% if not forloop.last %},{% endif %}{% endfor %}];
var city_name = [{% for item in city %}"{{ item.name }}"{% if not forloop.last %},{% endif %}{% endfor %}];
for(var i = 0; i<reg.length; i++){
if(el.val() == reg[i]){
$("#id_CITY").append("<option value = \"" + city_name[i] + "\">" + city_name[i] + "</option>");
}
}
});
});
</script>
<script>
$(document).ready(function() {
$("#id_CITY").change(function() {
var el = $(this);
function removeOptions(selectbox)
{
var i;
for(i=selectbox.options.length-1;i>=0;i--)
{
selectbox.remove(i);
}
}
removeOptions(document.getElementById("id_ZIP"));
$("#id_ZIP").append("<option value=\"\" selected=\"selected\">---------</option>");
var zip = [{% for item in zip %}"{{ item.cit }}"{% if not forloop.last %},{% endif %}{% endfor %}];
var zip_num = [{% for item in zip %}"{{ item.num }}"{% if not forloop.last %},{% endif %}{% endfor %}];
for(var i = 0; i<zip.length; i++){
if(el.val() == zip[i]){
$("#id_ZIP").append("<option value = \"" + zip_num[i] + "\">" + zip_num[i] + "</option>");
}
}
});
});
</script>
提前致谢
为了在调用 form.is_valid() 时得到 True,用户选择的城市必须是查询集 CITY.objects.none() 的成员。同样的事情也适用于 zip。这是不可能的。
尝试:
1. Put CITY.objects.all(), ZIP.objects.all() as querysets
2. Remove all options using js
2. Fill required options
我有以下模型 ChoiceFIeld
class ad(ModelForm):
REGION = forms.ModelChoiceField(queryset = REGION.objects.all())
CITY = forms.ModelChoiceField(queryset = CITY.objects.all())
ZIP = forms.ModelChoiceField(queryset = ZIP.objects.all())
class Meta:
model = myinfo
fields = ('REGION', 'CITY', 'ZIP',)
CITY
和 ZIP
由 javascript 动态填充,我在保存时遇到问题,因为 form.is_valid
返回 false,因此不会保存,除非我删除CITY
和 ZIP
,我做错了什么?
我的看法
def index(request):
city = CITY.objects.all()
zip = ZIP.objects.all()
form = ad(request.POST)
if request.method == 'POST':
if form.is_valid():
form.save()
else:
form = ad()
return render(request, 'dynamic/sample.html', {'adform':form, 'city': city, 'zip': zip,})
我的javascript
<script>
$(document).ready(function() {
function removeOptions(selectbox)
{
var i;
for(i=selectbox.options.length-1;i>=0;i--)
{
selectbox.remove(i);
}
}
removeOptions(document.getElementById("id_CITY"));
removeOptions(document.getElementById("id_ZIP"));
$("#id_CITY").append("<option value=\"\" selected=\"selected\">---------</option>");
$("#id_ZIP").append("<option value=\"\" selected=\"selected\">---------</option>");
});
</script>
<script>
$(document).ready(function() {
$("#id_REGION").change(function() {
var el = $(this);
function removeOptions(selectbox)
{
var i;
for(i=selectbox.options.length-1;i>=0;i--)
{
selectbox.remove(i);
}
}
removeOptions(document.getElementById("id_CITY"));
removeOptions(document.getElementById("id_ZIP"));
$("#id_CITY").append("<option value=\"\" selected=\"selected\">---------</option>");
$("#id_ZIP").append("<option value=\"\" selected=\"selected\">---------</option>");
var reg = [{% for item in city %}"{{ item.reg_id }}"{% if not forloop.last %},{% endif %}{% endfor %}];
var city_name = [{% for item in city %}"{{ item.name }}"{% if not forloop.last %},{% endif %}{% endfor %}];
for(var i = 0; i<reg.length; i++){
if(el.val() == reg[i]){
$("#id_CITY").append("<option value = \"" + city_name[i] + "\">" + city_name[i] + "</option>");
}
}
});
});
</script>
<script>
$(document).ready(function() {
$("#id_CITY").change(function() {
var el = $(this);
function removeOptions(selectbox)
{
var i;
for(i=selectbox.options.length-1;i>=0;i--)
{
selectbox.remove(i);
}
}
removeOptions(document.getElementById("id_ZIP"));
$("#id_ZIP").append("<option value=\"\" selected=\"selected\">---------</option>");
var zip = [{% for item in zip %}"{{ item.cit }}"{% if not forloop.last %},{% endif %}{% endfor %}];
var zip_num = [{% for item in zip %}"{{ item.num }}"{% if not forloop.last %},{% endif %}{% endfor %}];
for(var i = 0; i<zip.length; i++){
if(el.val() == zip[i]){
$("#id_ZIP").append("<option value = \"" + zip_num[i] + "\">" + zip_num[i] + "</option>");
}
}
});
});
</script>
提前致谢
为了在调用 form.is_valid() 时得到 True,用户选择的城市必须是查询集 CITY.objects.none() 的成员。同样的事情也适用于 zip。这是不可能的。
尝试:
1. Put CITY.objects.all(), ZIP.objects.all() as querysets
2. Remove all options using js
2. Fill required options