Django 一对一关系查询集

Django one to one relation queryset

我有以下两个模型

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

q = B.objects.filter(id=id).values('salary','a__id','a__name','a__age')

这将 return 一个 ValuesQuerySet

values

values(*fields) Returns a ValuesQuerySet — a QuerySet subclass that returns dictionaries when used as an iterable, rather than model-instance objects.

Each of those dictionaries represents an object, with the keys corresponding to the attribute names of model objects.

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

请试试这个:

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

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

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

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