Я пытаюсь сохранить форму модели, которая представляет банковский счет, но я продолжаю получать сообщение об ошибке ValueError, несмотря на то, что форма, кажется, для проверки. Модели, которые я должен использовать:
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 для человека BankAcc;
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})
Когда я пытаюсь сохранить форму, я получаю исключение VlaueError, даже если оно прошло проверку form.is_valid (), я получаю ошибку:
Cannot assign "u'26'": PersonBankAcc.bank must be a "bank" instance
Я знаю, что проблема возникает из-за использования виджета в PersonBankAccForm:
bank = forms.ChoiceField(widget=SelectWithPop)
потому что, если я удаляю это, это работает. Но все, что я могу сделать, это дать мне возможность добавить новый банк в базу данных через всплывающее окно, а затем вставить его в список выбора, аналогично всплывающим формам администратора. Я проверил базу данных и добавлен новый банк. Но это не работает, даже если я ничего не меняю, если я вызываю форму и отправляю ее, я получаю ту же ошибку
Я не понимаю, почему это не дает сбоя при проверке is_valid.
Любая помощь будет принята с благодарностью.
Спасибо
Andrew