可能重复:
Validating a form with overloaded initDjango的动态的ModelForm不会验证
我花了整个下午试图找出我做错了什么在这里,我知道这将是一些面子愚蠢的事情。当用户填写表格时,位置选择框取决于用户的国家并相应地列出不同的城市。
型号&的ModelForm
class Cars(models.Model):
owner = models.ForeignKey(User)
name = models.CharField(max_length=25)
location = models.PositiveIntegerField(default=1)
created = models.DateTimeField(default=utc_time)
class CarsForm(ModelForm):
def __init__(self, country, *args, **kwargs):
super(CarsForm, self).__init__(*args, **kwargs)
self.fields['location'] = forms.ModelChoiceField(queryset=Cities.objects.filter(country=country))
class Meta:
model = Cars
exclude = ('owner', 'created',)
查看
def new_car(request):
if request.method == u'POST' and request.is_ajax():
form = CarsForm(request.POST)
if form.is_valid():
etc...
在从计算器的建议,我编辑的ModelForm 初始化,使该国的变量传递。表单创建和html显示正常,一切都很好,只是现在表单不会验证。
UPDATE: 好了,它看起来像我(意为 '你')得到它的工作。有几件事情是丑陋的,一旦固定它的工作原理确定:
- 位置字段类型变更为外键,修正 数据不匹配的问题
- 初始化修改为接受国为kwarg
- 的表单验证现在将变量作为kwarg传递给变量 CarsForm(request.POST,country = country)
SUCCESS!不到一个小时。非常感谢大家!
是的,这是相同的基本问题。 –
如果我错了,纠正我,但'ModelChoiceField'在它的'to_python()'方法中设置它的值来自queryset。这与“位置”模型中定义的字段类型不是直接矛盾吗?'location'不是外键,它是'PositiveIntegerField',这似乎是为什么会有验证错误。 – Brandon
@Brandon这是一个次要问题。没有数据绑定到表单,所以'is_valid'提前保留而不运行任何实际验证。 –