我想保存一个模型表示一个银行账户,但即使窗体出现验证,我仍然收到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