Django一对一关系查询集

时间:2015-08-07 12:49:16

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

我有两个模型

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)。我想用一个查询集实现这一点。

2 个答案:

答案 0 :(得分: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查询,在这种情况下,查询完全符合您的要求。

答案 1 :(得分:1)

请试试这个:

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'>,它本质上是一个元组列表。