Django文書に基づいて、複数のオブジェクトを一度に渡して多くの関係に追加できるようにする必要がありますが、
* TypeError:ハッシュできないタイプ: 'list'
リストにキャストされたDjangoクエリセットを渡そうとすると。 QuerysetまたはValuesListQuerysetを渡すことも失敗するようです。 forループを使用するよりも良い方法はありますか?
使用: ドキュメント で説明されているobject.m2mfield.add(*items)
add()
は、引数のリストではなく、任意の数の引数を受け入れます。
add(obj1, obj2, obj3, ...)
そのリストを引数に展開するには、*
を使用します
add(*[obj1, obj2, obj3])
Djangoは各アイテムに対してobj.save()
を呼び出しませんが、代わりにbulk_create()
を使用します。
追加するには、クエリセットから追加する場合
例
# Returns a queryset
permissions = Permission.objects.all()
# Turns it into a list
permissions = list(permissions)
# Add the results to the many to many field (notice the *)
group = MyGroup.objects.get(name='test')
group.permissions.add(*permissions)
Django 1.9は、多対多の関係に追加するための追加の方法を追加します。
set
は新しい新機能です:
>>> new_list = [obj1, obj2, obj3]
>>> e.related_set.set(new_list)