2012-08-15 14 views
0

得到ManyRelatedManager我有这样一个模型:Django的 - 从字符串

class Book(models.Model): 
    authors = models.ManyToManyField(User) # User is a separate model 
    readers = models.ManyToManyField(User) 
    # ... rest of code 

我试图创建自己的看法这需要三个输入之外的功能:一本书,一个字符串和一个用户。用户被添加到书的ManyRelatedManager,其相应的字段名称与字符串匹配。

例如,如果该功能被称为foo

def foo(book, field_name, user): 
    f = #... this is where I need help, should be a ManyRelatedManager that belongs to 'book' 
    f.add(user) 
    book.save() 

调用foo(Book.objects.get(id=1), 'authors', User.objects.get(id=1))将导致ID为1的用户被添加到字段“作者在书ID为1。类似地,主叫foo(Book.objects.get(id=1), 'readers', User.objects.get(id=1))会导致ID为1的用户被添加到ID为1的书中的字段'读者'。

我试过使用Book._meta.get_field(),但是这返回ManyToManyField本身,而不是ManyRelatedManager。有没有某种内置的方式来获得其字段名称匹配字符串的ManyRelatedManager?

对不起,如果描述混乱,我的问题很难说出来。如果任何人都可以理解我的问题,我们将非常感谢您的帮助谢谢!

回答

1

getattr()可以从传递给它的字符串中的对象获取属性。

+0

我试过了,它返回一个ReverseManyRelatedObjectsDescriptor。我现在做错了什么? – Amit 2012-08-15 00:44:18

+0

您需要在模型上使用它,而不是模型类。 – 2012-08-15 00:44:43

+0

好的,谢谢你的帮助。现在它可以工作。 – Amit 2012-08-15 01:05:21