使用django模型表单选择有效选择

时间:2015-04-27 16:14:21

标签: javascript django django-models django-forms django-views

我正在

{"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()** 

如果我删除此声明,它可以正常工作。但我必须在开始时向用户显示一个空白的选项列表。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题,但我认为这里的具体问题是每个选项的HTML标记都不正确。它应该是:

<option value="{0}">{1}</option>

但是,最好将一个Car对象数组返回给JS函数并在JS for循环中创建HTML;向管道发送HTML效率不高。

这可能是拼写错误,但您引用CarCarsCar是语法正确的版本。)

此外,您已将Cars.objects.none()作为表单的查询集。您需要Cars.objects.all()