可能重複:
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'提前保留而不運行任何實際驗證。 –