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(*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'>
,它本质上是一个元组列表。
我有以下两个模型
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(*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'>
,它本质上是一个元组列表。