2010-01-14 3 views
0

J'essaie de renseigner la valeur d'une entrée de clé étrangère dans l'un de mes modèles en utilisant une valeur stockée en tant que données de session ... tout fonctionne bien, mais lorsque j'essaie d'accéder au enregistrement de l'administrateur je reçois cette erreur:Remplir une entrée de clé étrangère pour une ModelForm

Caught an exception while rendering: coercing to Unicode: 
    need string or buffer, Applicant found 

Applicant est le modèle lié par le champ de clé étrangère. Comment suis-je censé résoudre ce problème? Le code est le suivant:

if "customer_details" in request.session: 
    customer = request.session["customer_details"] 
else: 
    return HttpResponseRedirect('/application/') 

if request.method == 'POST': 
    current_address_form = CurAddressForm(request.POST or None) 

    if current_address_form.is_valid(): 
     current = current_address_form.save(commit=False) 
     current.customer = customer 
     current.save() 

else: 
    current_address_form = CurAddressForm() 

return render_to_response('customeraddress.html', { 
    'current_address_form': current_address_form,}, 
    context_instance=RequestContext(request)) 
+3

Quelle ligne de ce code déclenche l'erreur? Qu'y a-t-il dans 'request.session [" customer_details "]'? Une clé primaire? Vous devrez peut-être récupérer le 'demandeur 'représenté par les données de la session avant d'essayer de lui donner' current.customer'. –

+0

L'erreur est déclenchée lorsque j'essaie d'afficher l'enregistrement dans l'admin – Stephen

Répondre

3

On dirait que vous essayez de produire une représentation Unicode d'un modèle en utilisant le champ de clé étrangère qui pointe au demandeur.

Quelque chose comme ça (juste à côté du haut de ma tête):

class Applicant(models.Model): 
    name = models.CharField(max_length=255) 

class Foo(models.Model): 
    applicant = models.ForeignKey(Applicant) 

    def __unicode__(self): 
     # this won't work because __unicode__ must return an Unicode string! 
     return self.applicant 

S'il vous plaît nous montrer le code de modèle pour être sûr. Si ma supposition est correcte, assurez-vous que la méthode __unicode__() renvoie un objet Unicode. Quelque chose comme ceci:

def __unicode__(self): 
    return self.applicant.name 

ou

def __unicode__(self): 
    return unicode(self.applicant) 
+0

WOW !!! ... cela a résolu le problème. Merci Haes :) – Stephen

Questions connexes