2012-08-15 15 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