我想保存一個模型表示一個銀行賬戶,但即使窗體出現驗證,我仍然收到ValueError。我必須使用的型號有:ModelForm保存失敗
class Person(models.Model):
name = models.CharField()
class Bank(models.Model):
bsb = models.CharField()
bank_name = models.CharField()
def __unicode__(self):
return '%s - %s', (self.bank_name, self.bsb)
def _get_list_item(self):
return self.id, self
list_item = property(-get_list_item)
class BankAccount(models.Model):
bank = models.ForignKey(Bank)
account_name = models.CharField()
account_number = models.CharField()
class PersonBankAcc(models.Model):
person = models.ForeignKey(Person)
的的ModelForm的personBankAcc;
def PersonBankAccForm(forms.ModelForm):
bank = forms.ChoiceField(widget=SelectWithPop)
class Meta:
model = PersonBankAcct
exclude = ['person']
def __init__(self, *args, **kwargs):
super(PersonBankAccForm, self).__init__(*args, **kwargs)
bank_choices = [bank.list_item for banks in Bank.objects.all()]
bank_choices.isert(0,('','------'))
self.fields['bank'].choices = bank_choices
的觀點是:
def editPersonBankAcc(request, personBankAcc_id=0):
personBankAcc = get_object_or_404(PersonBankAcc, pk=personBankAcc_id)
if request.method == 'POST':
form = PersonBankAccForm(request.POST, instance=personBankAcc)
if form.is_valid():
print 'form is valid'
form.save()
return HttpResponseRedirect('editPerson/' + personBankAcc.person.id +'/')
else:
form = PersonBankAccForm(instance=personBankAcc)
return render_to_response('editPersonBankAcc', {'form': form})
當我嘗試保存表單我得到,即使它被傳遞的form.is_valid(與A VlaueError除外)檢查,我得到的錯誤是:
Cannot assign "u'26'": PersonBankAcc.bank must be a "bank" instance
我知道這個問題是因爲我使用的PersonBankAccForm小部件的損害:
bank = forms.ChoiceField(widget=SelectWithPop)
,因爲如果我刪除它的作品。但所有這一切都使我能夠通過彈出窗口將新銀行添加到數據庫,然後將其插入到選擇列表中,類似於管理彈出窗體。我檢查了數據庫並添加了新的銀行。但即使我不改變任何東西,如果我調用表單並提交它,我也會得到同樣的錯誤。
我不明白爲什麼它不在is_valid檢查失敗。
任何幫助將不勝感激。
感謝
安德魯
只是好奇,應該是在的ModelForm元模型EmpBankAcct還是應該是PersonBankAcc?我問,因爲我沒有看到EmpBankAcct模型。 – 2009-11-19 01:53:39
另一個輸入錯誤是我輸入另一個鍵時輸入了一個內容。它應該是PersonBankAcc。 – 2009-11-19 03:29:22