我有两个模型
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)。我想用一个查询集实现这一点。
答案 0 :(得分:1)
q = B.objects.filter(id=id).values('salary','a__id','a__name','a__age')
这将返回ValuesQuerySet
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'>
,它本质上是一个元组列表。