0

私はこのようなモデルを持っています:

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

Book、文字列、User の 3 つの入力を受け取るビューの外に関数を作成しようとしています。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 の Book のフィールド「authors」に追加されます。同様に、呼び出しfoo(Book.objects.get(id=1), 'readers', User.objects.get(id=1))により、ID 1 のユーザーが ID 1 の Book のフィールド「readers」に追加されます。

使用してみBook._meta.get_field()ましたが、これは ManyRelatedManager ではなく、ManyToManyField 自体を返しました。フィールド名が文字列と一致する ManyRelatedManager を取得する組み込みの方法はありますか?

その説明がわかりにくい場合は申し訳ありませんが、私の問題は言葉では言い表せません。誰かが私の問題を理解できるなら、あなたの助けに感謝します。ありがとう!

4

1 に答える 1

1

getattr()渡された文字列からオブジェクトの属性を取得できます。

于 2012-08-15T00:41:27.367 に答える