是否可以将相关字段的行传递到django数据库函数中,如果是这样,我该如何实现?当我尝试时,我最终得到一个整数(id列)而不是行。
型号:
class ModelA(models.Model):
pass
class ModelB(models.Model):
pass
class ModelC(models.Model):
model_a_rel = models.ManyToManyField(
ModelA,
related_name='m2mrelatedobj'
)
fkobj = models.ForeignKey(
ModelB
)
所需的查询集:
ModelA.objects.annotate(
my_annotation=DatabaseFn('m2mrelatedobj__model_a_rel')
).filter(my_annotation=True)
我的目标是将fkobj
的行传递到DatabaseFn
,以便连接在查询集上完成一次,而不是在每个注释中。
这在django中甚至可能吗?现在,我从postgres函数得到一个错误,说它收到一个整数而不是一行,它表示django没有进行额外的连接。非常感谢任何见解,谢谢。
环境:Django v1.10.3, python 2.7, postgresql 9.5
答案 0 :(得分:0)
也许您正在寻找下划线表示法。像这样:
ModelC.objects.all().values('model_a_rel__field_ModelA1_name','model_a_rel__field_ModelA2_name','fkobj__ModelB1_field_name')
或者相反:
ModelA.objects.all().values('m2mrelatedobj__ModelC1_field_name')
这些查询是数据库的往返。在外键的情况下,它将返回一行包含所需的列。在很多情况下,它会为每个现有关系返回一行,并使用下划线表示法选择列。
我跳这个帮助