【问题标题】:Django one to one relation querysetDjango 一对一关系查询集
【发布时间】:2015-10-30 22:08:27
【问题描述】:

我有以下两个模型

class A(models.Model):
  name = models.CharField()
  age = models.SmallIntergerField()

class B(models.Model):
  a = models.OneToOneField(A)
  salary = model.IntergerField()

不,我有他们两个的记录。我想查询具有已知 id 的模型 A,并且我想要 A 和 B 记录。

SQL 查询是:

SELECT A.id, A.name, A.age, B.salary
FROM A INNER JOIN B ON A.id = B.a_id
WHERE A.id=1

请向我提供 django 查询(通过使用 orm)。我想用一个查询集来实现这一点。

【问题讨论】:

    标签: python django django-models django-views django-rest-framework


    【解决方案1】:
    q = B.objects.filter(id=id).values('salary','a__id','a__name','a__age')
    

    这将返回一个ValuesQuerySet

    values

    values(*fields) 返回一个 ValuesQuerySet — 一个 QuerySet 子类 用作可迭代对象时返回字典,而不是 模型实例对象。

    这些字典中的每一个都代表一个对象,带有键 对应模型对象的属性名。

    您实际上可以打印q.query 以获取QuerySet 后面的sql 查询,在这种情况下,这正是您所要求的。

    【讨论】:

      【解决方案2】:

      请试试这个:

      result = B.objects.filter(a__id=1).values('a__id', 'a__name', 'a__age', 'salary')

      结果是<class 'django.db.models.query.ValuesQuerySet'>,它本质上是一个字典列表,其中键作为字段名,值作为实际值。如果您只需要这些值,请执行以下操作:

      result = B.objects.filter(a__id=1).values_list('a__id', 'a__name', 'a__age', 'salary')

      结果是<class 'django.db.models.query.ValuesListQuerySet'>,它本质上是一个元组列表。

      【讨论】:

      • 啊,@zxzak 在我面前,但如果你想要 django 文档,他的回答有参考。
      猜你喜欢
      • 2016-06-10
      • 2014-07-14
      • 2015-12-06
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多