2017-03-29 192 views
0

我想动态获取模型的向后外键管理器。Django向后外键管理器

如果我有:

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() 

并得到结果。

但是如果我有字符串 'MODELA',我做的事:

a = getattr(modelB, 'modela_set') 

我会得到

django.db.models.fields.related_descriptors.ManyToManyDescriptor 

,如果我这样做:

a.all() 

我得到一个属性错误。

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

有没有办法做到这一点?

回答

1

这是一个类与实例问题。

getattr(modelB, 'modela_set') 

不同于:

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