Ошибка сохранения в ModelForm - PullRequest
0 голосов
/ 19 ноября 2009

Я пытаюсь сохранить форму модели, которая представляет банковский счет, но я продолжаю получать сообщение об ошибке 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

1 Ответ

3 голосов
/ 19 ноября 2009

еще лучше, я не думаю, что это действительно должно быть в функции инициализации ...

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...