django M2M对象中所有链接对象的计数

时间:2015-08-14 06:30:10

标签: python django django-models

使用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中的东西可能将所有链接的对象组合在一起?我没有找到任何东西(我邋!!)

0 个答案:

没有答案