2011-08-02 50 views
2

巨大的名单考虑这3种型号:Django的模式选择字段:价格

# models.py 
class City(models.Model): 
    name = models.CharField(max_length=50) 

class Institute(models.Model): 
    name = models.CharField(max_length=100) 
    city = models.ForeignKey(City) 

class Student(models.Model): 
    name = models.CharField(max_length=60) 
    roll = models.CharField(max_length=10) 
    institute = models.ForeignKey(Institute) 

现在我创建一个模型的形式添加/编辑学生,但我提供选择的城市和机构用户的选项。所以基本上,当用户选择的城市是使用JavaScript

# forms.py 
class StudentForm(forms.ModelForm): 
    city = forms.ModelChoiceField(City) 
    institute = forms.ModelChoiceField(queryset=Institute.objects.all()) 

class Meta: 
    model = Student 

显示相应的机构,但机构的数量超过3000所以,我想要的是保持选择为空白初定研究所场(怎么把它们会一旦用户选择一个城市,由JavaScript填充),但是在提交数据时,我会得到一个“Select a valid choice”验证错误。任何想法如何解决这样的问题?

注:当我不要指定选择(院场)网页大小为300KB,当我指定他们网页的大小1.1MB

+0

能告诉你的JavaScript代码呢? – LaundroMat

回答

1

显然,我必须重写Choice小部件并将其渲染方法更改为不显示任何选项。由于仍然提供了选择参数,所以不会出现验证错误,我可以自由使用JavaScript来呈现所选城市的研究机构。

0

您应该确保Institute值是满档在选择框中的起始位置也应该具有主键作为html id属性。

0

我有同样的问题,但通过widget.choices设置为[]克服了它

class StudentForm(forms.ModelForm): 
    city = forms.ModelChoiceField(City) 
    institute = forms.ModelChoiceField(queryset=Institute.objects.all()) 

def __init__(self, *args, **kwargs): 
    super(StudentForm, self).__init__(*args, **kwargs) 
    self.fields['institute'].widget.choices = []