我正在
{"car": ["Select a valid choice. That choice is not one of the available choices."]}
尝试使用AJAX分配foreignkey字段选项时出现错误。
我的代码fiels是这样的。
class Person(models.Model):
name = models.CharField(max_length=50)
car = models.ForeignKey(Car)
class PersonForm(forms.ModelForm):
company = forms.CharField(max_length=30)
class Meta:
model = Person
class CreatePersonView(CreateView):
model = Person
form_class = PersonForm
def get_form(self, form_class):
form = super(CreatePersonView,self).get_form(form_class)
form.fields['car'].queryset = Cars.objects.none()
class GetCarsList(View):
def get(self, request, *args, **kwargs):
company = request.GET.get('company',None)
cars = Car.objects.get(company=company)
cars_list = []
for car in cars:
o = "<option id = '{}'>{}<>".format(car.id, car.name)
cars_list.append(o)
return HttpResponse(cars_list)
在我的Javascript函数中我正在做的是
function getCars(element){
company = element.value
if(company.length != 0 ){
$.ajax({url:'/get_cars/',
type:'GET',
data:{'company':company},
success: function(response){
$("#id_cars").html(response.responseText);
},
error: function(response){
$("#id_cars").html(response.responseText);
}
});
}
}
但它给了我一个有效的选择。请告诉我我做错了什么。或者将有效选择附加到外键字段的正确方法是什么。 帮助将不胜感激
编辑:问题是分配给该字段的查询集,即
def get_form(self, form_class):
form = super(CreatePersonView,self).get_form(form_class)
**form.fields['car'].queryset = Cars.objects.none()**
如果我删除此声明,它可以正常工作。但我必须在开始时向用户显示一个空白的选项列表。
答案 0 :(得分:0)
您的代码存在一些问题,但我认为这里的具体问题是每个选项的HTML标记都不正确。它应该是:
<option value="{0}">{1}</option>
但是,最好将一个Car
对象数组返回给JS函数并在JS for循环中创建HTML;向管道发送HTML效率不高。
这可能是拼写错误,但您引用Car
和Cars
(Car
是语法正确的版本。)
此外,您已将Cars.objects.none()
作为表单的查询集。您需要Cars.objects.all()
。