私は次のように2つのモデルを持っています:
class Book(models.Model):
title = models.CharField(max_length=100)
year = models.IntegerField(max_lenght=4)
author = models.ManyToManyField(null=true, blank=true)
class Author(models.CustomUser):
# some fields
今、私が探しているのは、本のオブジェクトのリストを反復処理せずに、複数のAuthor
オブジェクトにBook
を追加することです。
Djangoのupdateメソッドは、 docs のようにManyToManyField
をサポートしていません。それは言う
このメソッドを使用して設定できるのは、非関係フィールドと外部キーフィールドのみです。非関係フィールドを更新するには、新しい値を定数として指定します。 ForeignKeyフィールドを更新するには、新しい値を、ポイントする新しいモデルインスタンスに設定します。
そのため、現在、各ブックオブジェクトのデータベースにアクセスするため、非常に非効率的な次のことを行っています。
author = Author.objects.get(pk=1)
books = Book.objects.filter(**kwargs) # say this returns 100 objects
# each loop here will hit the database making it really inefficient
# for long lists.
for book in books:
book.authors.add(author)
book.save()
これを回避する方法があると確信していますが、ドキュメントで見つけることができません。どんな助けでもいただければ幸いです。ありがとう
答えはここにあります:
https://stackoverflow.com/a/10116452/202168
要するに、(Django> = 1.4)ではbulk_create
スルーモデルで、カスタムスルーモデルを定義していない場合でも。