考虑这3个模型:
# 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填充),但在提交数据时,我收到“选择有效选择”验证错误。有任何想法如何解决这个问题?
注意:当我没有指定选项时(对于学院字段),网页大小为300KB,当我指定它们时,网页大小为1.1MB
答案 0 :(得分:1)
显然,我必须覆盖Choice小部件并更改其render方法以不显示任何选项。由于仍然提供了选择参数,因此不会发生验证错误,我可以自由地使用javascript来选择所选城市的研究所。
答案 1 :(得分:0)
您应该确保在选择框中填充的Institute
值也应该将主键作为html id
属性。
答案 2 :(得分: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 = []