私はこのようなモデルを持っています:
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 を取得する組み込みの方法はありますか?
その説明がわかりにくい場合は申し訳ありませんが、私の問題は言葉では言い表せません。誰かが私の問題を理解できるなら、あなたの助けに感謝します。ありがとう!