Django倒退了外键经理

时间:2017-03-29 14:53:42

标签: python django getattr

我正在尝试动态获取模型的向后外键管理器。

如果我有:

class modelA(models.Model)
    name = models.CharField(max_length=100)

class modelB(models.Model)
    fk = models.ManyToManyField(modelA)

From the docs我可以看到我可以通过以下方式获得向后的外键管理员:

a = modelB.modela_set
shell中的

给了我

django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager

我能做什么

a.all()

并得到一个结果。

但是,如果我有字符串&#39; modela&#39;我这样做:

a = getattr(modelB, 'modela_set')

我会得到

django.db.models.fields.related_descriptors.ManyToManyDescriptor

如果我这样做:

a.all()

我收到属性错误。

我不明白为什么getattr()表现得这样。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:1)

这是一个类vs实例问题。

getattr(modelB, 'modela_set')

不同于:

a = ModelB.objects.get(pk=1)
getattr(a, 'modela_set')