2011-05-15 24 views
5

Tengo un modelo llamado MessagePerson que tiene los campos de los detalles que representan los mensajes para una persona en particular, cuyos detalles están en los modelos Personal.Django Seleccione la consulta con la columna específica

Incluso tengo un modelo separado que tiene una referencia de clave foránea a la clase Personal.

class Personal(models.Model): 
    name = models.CharField(max_length=20,primary_key=True) 
    email = models.EmailField(blank=True,null=True) 
    address = models.CharField(max_length=50,blank=True,null=True) 
    contact = models.CharField(max_length=20) 
    pic = models.FileField(upload_to='image/',blank=True,null=True) 

    def __unicode__(self): 
     return self.name  

class MessagePerson(models.Model): 
    person = models.ForeignKey(Personal, related_name='msg') 
    mname = models.CharField(max_length=30) 
    mPhone = models.CharField(max_length=20,blank=True,null=True) 
    memail = models.EmailField(blank=True,null=True) 
    message = models.CharField(max_length=200,blank=True,null=True) 

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

class GData(models.Model): 
    person = models.ForeignKey(Personal, related_name='everyperson') 
    place = models.CharField(max_length=40) 
    typeOfProperty = models.CharField(max_length=30) 
    typeOfPlace = models.CharField(max_length=20) 
    price = models.IntegerField() 
    def __unicode__(self): 
     return self.person.name 

Ahora lo que necesito es que tengo la id de GData con el que yo debería guardar un mensaje para el particular 'MessagePerson using name of Personal`

La consulta que utiliza es: Views.py

def message(request, g_id): 
    n = request.POST['bname'] 
    p = request.POST['bphone'] 
    e = request.POST['bemail'] 
    m = request.POST['bmsg'] 

    mperson = GData.objects.get(id=g_id).values('person') 

    msg_job = MessagePerson(person=mperson, mname=n, mPhone=p, memail=e, message=m) 
    msg_job.save() 
    return render_to_response('ivent.html', context_instance=RequestContext(request)) 

Ahora la cosa es, sin ningún error, ni siquiera está almacenando el mensaje :(

favor me ayude a obtener el resultado :(

Respuesta

9

cosa que destaca es que:

mperson = GData.objects.get(id=g_id).values('person') 

probablemente debería ser:

mperson = GData.objects.get(id=g_id).person 

También debe probablemente reconsiderar su punto de vista lógico, sólo busca rápidamente algo así es un poco mejor, pero probablemente pueda mejorarse:

from django.shortcuts import get_object_or_404 

def message(request, g_id): 
    mperson = get_objects_or_404(GData, id=g_id).person 

    if request.method == 'POST': 
     n = request.POST.get('bname') 
     p = request.POST.get('bphone') 
     e = request.POST.get('bemail') 
     m = request.POST.get('bmsg') 
     msg_job = MessagePerson(person=mperson, mname=n, mPhone=p, memail=e, message=m) 
     msg_job.save() 
     return render_to_response('ivent.html', context_instance=RequestContext(request)) 

    return HttpResponse('Not a post request') 
+0

DTing, su derecha - mi respuesta no hubiera funcionado, eso me enseñará a no verificar una respuesta :-) – JamesO

+0

@DTing: la solución de Ur funcionó cuando lo usé en 'python manage.py shell', pero a través del sitio web no está guardando el objeto . :(¿Debería proporcionar más detalles? El sitio cuando envía solo devuelve la misma página sin siquiera el aviso de éxito, que he creado. –

+0

¿Ha comprobado la base de datos para ver si se guardó la instancia? – DTing

Cuestiones relacionadas