J'essaye d'enregistrer un modelform qui représente un compte de banque mais je continue à obtenir un ValueError même si le formulaire semble valider. Les modèles que je dois utiliser sont:L'enregistrement de ModelForm échoue
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)
Le ModelForm pour la 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
La vue est:
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})
Lorsque je tente de sauver la forme que je reçois l'exception VlaueError même si elle est transmis le form.is_valid() vérifier l'erreur que je reçois est:
Cannot assign "u'26'": PersonBankAcc.bank must be a "bank" instance
Je sais que la question est à cause du dÉCOULANT un widget J'utilise dans le PersonBankAccForm:
bank = forms.ChoiceField(widget=SelectWithPop)
parce que si je l'enlève, cela fonctionne. Mais tout cela me donne la possibilité d'ajouter une nouvelle banque à la base de données via une popup, puis l'insère dans la liste de sélection, similaire aux formulaires contextuels d'administration. J'ai vérifié la base de données et la nouvelle banque est ajoutée. Mais ça échoue même si je ne change rien, si j'appelle le formulaire et le soumets, j'ai la même erreur.
Je ne comprends pas pourquoi il n'échoue pas lors de la vérification is_valid.
Toute aide serait grandement appréciée.
Merci
Andrew
curieux est le modèle dans la méta ModelForm censé être EmpBankAcct ou devrait-il être PersonBankAcc? Je demande parce que je ne vois pas un modèle EmpBankAcct. –
Une autre faute de frappe, je pensais une chose en tapant une autre. Ce devrait être PersonBankAcc. –