2011-03-18 12 views
7

Encontré un hilo que parecía estar relacionado en djangocode pero realmente no me ayudó. Estoy tratando de guardar un modelo y está lanzando una excepción. Creo que podría estar relacionado con referirme a la misma clave foránea dos veces en mi modelo. También podría tener que ver con la definición de unique = True en uno de los campos clave foráneos. No séGuardando el error de ModelForm (User_Message no se pudo crear porque los datos no se validaron)

class User_Message(models.Model): 
    recipient=models.ForeignKey(User, unique=True, related_name="recipients") 
    subject=models.CharField(max_length=100) 
    sender=models.ForeignKey(User, related_name="senders") 
    message=models.TextField(max_length=500) 
sent=models.DateField(auto_now_add=True) 

def __unicode__(self): 
    return self.subject 



if request.method=="POST" and request.POST['id_message']: 
    messageform=User_MessageForm(request.POST) 
    recipient=[] #receiver of mail must be a list 
    recipient.append(post.user) 
    if messageform.is_valid: 
     message=messageform.save(commit=False) 
     message.sender=user 
     message.recipient=post.user 
     return HttpResponse('%s %s' %(user,post.user)) 
     message.save() 

     #send the email 
     subject=messageform.cleaned_data['id_subject'] 
     body=messageform.cleaned_data['id_message'] 

     try: 
      send_mail(subject, body, sender, recipient) 
     except BadHeaderError: 
      return HttpResponse('Invalid header found.') 

está fallando en la línea, "messageform.save (confirmación = False). El hombre que pensaba que la declaración era prueba de fallos.

los datos POST que es recibida por el ModelForm contiene los campos de asunto y mensaje. Estos datos se valida con éxito por mi ModelForm.

¿Son los nombres relacionados, la única = verdad ... ¿qué pasa?

Gracias

Respuesta

23

Aquí es su problema:

if messageform.is_valid: 

necesita la línea se

if messageform.is_valid(): 

Básicamente, el error proviene de llamar save() en una forma inválida.

+0

Lo siento mucho en este caso. Debería haber atrapado eso. Estoy cansado e intento hacer demasiado. Me has ayudado tremendamente hoy, Yuji – Ben

+0

¡Ningún hombre problemático! No habría captado eso si no leí el mensaje de error y eché un vistazo a lo que el código estaba volteando - resulta que fue 'forms.errors', que nunca debería pasar en save(), y luego noté el(). –

+0

Oh, ¡Aleluya! Caí en la misma trampa. –

Cuestiones relacionadas