我有一个关系模型集,它有5个表,每个表都有一个到多个关系。在第二张表之后,我很难访问模型信息。例如。
class TableA(models.Model):
pass
class TableB(models.Model):
tablea = models.ForeignKey(TableA, oncascade...)
class TableC(models.Model):
tableb = models.ForeignKey(TableB, oncas...)
class TableD(models.Model):
tablec = models.ForeignKey(TableC, ...)
class TableE(models.Model):
tabled = models.ForeignKey(TableE, ...)在我的views.py中,我在TableA上使用了预取相关的方法:
from . models import *
data = TableA.objects.all().prefetch_related('tableb_set__tablec_set__tabled_set')我似乎无法从TableC、TableD或TableE获取信息。
for a in data:
print(a.id)
for b in a.tableb_set.values():
print(b['id])
for c in b.tablec_set.values(): #This is where I get an error message stating the model doesn't have a relatedmanager如何访问深入到2+关系中的模型信息prefetch_related表?
提前感谢
发布于 2019-11-22 16:40:41
这对我有用。检查您的代码示例是否与您的源代码对齐,并且您在源代码中没有任何输入。
for a in TableA.objects.prefetch_related(
"tableb_set__tablec_set__tabled_set__tablee_set"
):
print(f"+ {a.id}")
for b in a.tableb_set.all():
print(f"+- {b.id}")
for c in b.tablec_set.all():
print(f"+-- {c.id}")
for d in c.tabled_set.all():
print(f"+--- {d.id}")
for e in d.tablee_set.all():
print(f"+--- {e.id}")
for query in connection.queries:
print(query["sql"])
# prints:
+ 1
+ 2
+- 2
+-- 2
+--- 2
+--- 11
+---- 3
+-- 4
+- 5
+-- 1
+--- 4
+--- 6
[...]
SELECT "main_tablea"."id" FROM "main_tablea"
SELECT "main_tableb"."id", "main_tableb"."a_id" FROM "main_tableb" WHERE "main_tableb"."a_id" IN (1, 2, 3, 4, 5)
SELECT "main_tablec"."id", "main_tablec"."tableb_id" FROM "main_tablec" WHERE "main_tablec"."tableb_id" IN (2, 5, 6, 4, 1, 3)
SELECT "main_tabled"."id", "main_tabled"."tablec_id" FROM "main_tabled" WHERE "main_tabled"."tablec_id" IN (5, 9, 2, 4, 6, 7, 1, 3, 8)
SELECT "main_tablee"."id", "main_tablee"."tabled_id" FROM "main_tablee" WHERE "main_tablee"."tabled_id" IN (4, 6, 2, 11, 3, 7, 8, 1, 10, 5, 9)发布于 2019-11-22 17:09:31
使用.all()方法在_set上访问信息!
https://stackoverflow.com/questions/58998288
复制相似问题