【问题标题】:Django Select query with specific column具有特定列的 Django Select 查询
【发布时间】:2011-05-15 08:18:23
【问题描述】:

我有一个名为 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

现在我需要的是,我有 GDataid,我应该使用它为特定的“MessagePersonusing name ofPersonal”保存一条消息

我使用的查询是: 视图.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))

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

请帮助我得到结果:(

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案1】:

    突出的是:

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

    应该是:

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

    您可能还应该重新考虑您的视图逻辑,只是快速看一下这样的东西稍微好一点,但可能可以改进:

    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')
    

    【讨论】:

    • DTing,你的权利 - 我的答案不会奏效 - 这会教我不检查答案:-)
    • @DTing :当我在 python manage.py shell 中使用它时,Ur 解决方案有效,但通过网站它没有保存对象。 :( 我应该提供更多详细信息吗?提交时的网站只是返回相同的页面,甚至没有我创建的成功通知。
    • 你查过数据库看实例是否保存了吗?
    • 另外,在您保存后,您似乎想要重定向到另一个视图而不是 render_to_response。
    • @DTing :我确实检查了数据库。我通过 django 的管理站点检查了它们。如果我把来自shell 的数据保存下来。在此之前还有另一种相同的插入类型情况。这完美无缺。但这不是。是的,我将它们呈现到同一页面而不是重定向:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2020-04-16
    • 2017-06-03
    • 2013-07-03
    相关资源
    最近更新 更多