0

我有一个这样的模型:

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

我正在尝试在我的视图之外创建一个函数,该函数需要三个输入:一本书、一个字符串和一个用户。User 被添加到 Book 的 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?

抱歉,如果该描述令人困惑,我的问题很难用语言表达。如果有人能理解我的问题,我们将不胜感激。谢谢!

4

1 回答 1

1

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

于 2012-08-15T00:41:27.367 回答