Django选择具有特定列的查询

5 django django-models django-queryset

我有一个名为的模型MessagePerson,其中包含描述特定人的消息的详细信息,其详细信息在Personal模型中.

我甚至有一个单独的模型,它有一个外键引用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
Run Code Online (Sandbox Code Playgroud)

现在,我需要的是,我拥有id的GData使用,我应该保存为特定的"MessagePerson消息using name ofPersonal`

我使用的查询是: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))
Run Code Online (Sandbox Code Playgroud)

现在的事情是,没有任何错误,它甚至没有存储消息:(

请帮我看看结果:(

DTi*_*ing 9

突出的是:

mperson = GData.objects.get(id=g_id).values('person')
Run Code Online (Sandbox Code Playgroud)

应该是:

mperson = GData.objects.get(id=g_id).person
Run Code Online (Sandbox Code Playgroud)

你也应该重新考虑你的视图逻辑,只是看起来像这样的东西稍微好一点,但可能会改进:

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')
Run Code Online (Sandbox Code Playgroud)