使用ManyToMany
以下列方式将模型链接到其他几个模型:
class Tag(model.models):
attributes...
class A(model.models):
f = models.ManyToManyField(Tag)
class B(model.models):
f = models.ManyToManyField(Tag)
class C(model.models):
f = models.ManyToManyField(Tag)
目标是将所有链接对象的计数记录到Tag。
像count(A) + count(B) + count(C)
有没有比这更好的方法:
count = 0
count += tag.a_set.count()
count += tag.b_set.count()
count += tag.c_set.count()
此外,当链接模型未知时,以编程方式执行此操作的选项有哪些?即我们不知道型号名称,因此无法进行model_set
。
一种可能的方式:
# get count from all fields with '_set' at the end
linked_models = [
model_set
for model_set in dir(Tag)
if model_set.endswith('_set')
]
count = sum([
getattr(tag, model).count
for model in linked_models
])
关注:
服务器上的性能:这可能需要花费太多时间来为每个标记生成
有一种更好的方法可以做到这一点:隐藏在_meta
中的东西可能将所有链接的对象组合在一起?我没有找到任何东西(我邋!!)