在Django中如何进行过滤,然后获取查询并获取字段值?

时间:2016-09-29 02:42:59

标签: django postgresql django-queryset django-orm django-database

以下是我的Django程序的一个应用程序的简化models.py:

#This is the custom queryset manager

class TenantManager(models.Manager):
def for_tenant(self, tenant):
    return self.get_queryset().filter(tenant=tenant)

#This is one of the models:

class accountChart(models.Model):
    name=models.CharField(max_length =200)
    remarks=models.TextField(blank=True)
    key=models.CharField(max_length=20)
    tenant=models.ForeignKey(Tenant,related_name='accountchart_account_user_te nant')     
    objects = TenantManager()

  #This is another data model, related ith FK to 1st model shown here

  class paymentMode(models.Model):
    name = models.TextField('Payment Mode Name')
     payment_account=models.ForeignKey(accountChart,related_name='paymentMode_accountChart')
    default=models.CharField('Default Payment Mode ?', max_length=3,choices=choice, default="No")
    tenant=models.ForeignKey(Tenant,related_name='paymentmode_account_user_tenant')
    objects = TenantManager()

现在,我正在根据用户inout执行以下查询集。然而,Django正在抛出错误。请求你的帮助,因为这件事让我伤心超过2天。

#Queryset:
payment_mode=paymentMode.objects.for_tenant(request.user.tenant).get(name__exact=request.POST.get('payment_mode'))
payment_account=payment_mode.account

但是,Django在第二行查询集中抛出了错误。即使我使用filter而不是get,它的显示错误 - Queryset也没有过滤器!!

据我所知,首先django给了我与该用户相关的所有支付模式,然后从request.POST.get对象获取支付模式,然后在第二行中尝试获取 相关的外键。任何人都可以告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:1)

嗯,很抱歉打扰你们所有人,我得到了答案,因为Queryset中有一个拼写错误。

应该如此,一旦我使用"得到"解决方案很好。现在,我不确定除了缓存会话数据之外,还有更好的方法吗?

这是我写的答案,供将来参考。