242

Djangoのドキュメントに基づいて、多対多の関係に追加するために一度に複数のオブジェクトを渡すことができるはずですが、

* TypeError:ハッシュ不可能なタイプ:'リスト'

リストにキャストされたdjangoクエリセットを渡そうとしたとき。QuerysetまたはValuesListQuerysetの受け渡しも失敗するようです。forループを使用するよりも良い方法はありますか?

4

3 に答える 3

403

使用:ドキュメントobject.m2mfield.add(*items)で説明されているように:

add()引数のリストではなく、任意の数の引数を受け入れます。

add(obj1, obj2, obj3, ...)

そのリストを引数に展開するには、*

add(*[obj1, obj2, obj3])

補遺:

Djangoはobj.save()各アイテムを呼び出すのではbulk_create()なく、代わりにを使用します。

于 2011-02-10T16:10:15.470 に答える
75

追加するには、クエリセットから追加する場合

# Returns a queryset
permissions = Permission.objects.all()

# Add the results to the many to many field (notice the *)

group = MyGroup.objects.get(name='test')

group.permissions.add(*permissions)

From:クエリセットの結果をManytoManyfieldに挿入します

于 2015-08-28T08:45:14.403 に答える
47

Django 1.9は、多対多の関係に追加するための追加の方法を追加します。

ドキュメント:https ://docs.djangoproject.com/en/dev/ref/models/relations/#django.db.models.fields.related.RelatedManager.set

set新しい素敵なものです:

>>> new_list = [obj1, obj2, obj3]
>>> e.related_set.set(new_list)
于 2016-07-03T04:43:05.000 に答える