2011-08-02 54 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 = []