【问题标题】:In Django how to do filter, followed by get queries and get a field value?在Django中如何进行过滤,然后获取查询并获取字段值?
【发布时间】:2017-02-07 04:53:53
【问题描述】:

以下是我的 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()

现在,我正在根据用户输入执行以下查询集。但是,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 在查询集的第二行抛出错误。即使我使用过滤器而不是获取,它也显示错误 - 查询集没有过滤器!

据我了解,首先 django 为我提供了与该用户相关的所有支付模式,然后从 request.POST.get 对象获取支付模式,然后在第二行中它试图获取 相关外键。谁能告诉我哪里出错了?

【问题讨论】:

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


    【解决方案1】:

    好吧,很抱歉打扰大家,我刚刚得到答案,因为 Queryset 中有错字。

    应该如此,一旦我使用“get”,解决方案就可以了。现在,我不确定除了缓存会话数据是否有更好的方法!

    这是我写的答案,供其他人参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 2016-07-28
      • 2021-03-05
      • 2021-08-17
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多