0

銀行口座を表すモデルフォームを保存しようとしていますが、フォームが検証されているように見えても、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)

personBankAccのModelForm;

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()チェックに合格しても、VlaueError例外が発生します。発生するエラーは次のとおりです。
Cannot assign "u'26'": PersonBankAcc.bank must be a "bank" instance

PersonBankAccFormで使用しているウィジェットが原因で問題が発生していることはわかっています。ウィジェットを
bank = forms.ChoiceField(widget=SelectWithPop)
削除すると機能するためです。しかし、それだけで、ポップアップを介してデータベースに新しい銀行を追加し、それを管理ポップアップフォームと同様に選択リストに挿入することができます。データベースを確認したところ、新しい銀行が追加されました。しかし、何も変更しなくても失敗します。フォームを呼び出して送信すると、同じエラーが発生します。

is_validチェックで失敗しない理由がわかりません。

どんな助けでも大歓迎です。


アンドリューありがとう

4

1 に答える 1

3

さらに良いことに、私はそれが本当にinit関数にある必要はないと思います...

def PersonBankAccForm(forms.ModelForm):
    bank = forms.ModelChoiceField(queryset=Bank.objects.all(),widget=SelectWithPop(),empty_label='-----')
    class Meta:
        model = EmpBankAcct
        exclude = ['person']

    def __init__(self, *args, **kwargs):
        super(PersonBankAccForm, self).__init__(*args, **kwargs)
于 2009-11-19T01:14:08.997 に答える