Как добавить несколько объектов в отношения ManyToMany сразу в Django?
Основываясь на документе Django, я должен иметь возможность передавать сразу несколько объектов для добавления в manytomany-отношения, но я получаю
* TypeError: unhashable type: 'list'
когда я пытаюсь передать задание django, указанное в списке. Передача Queryset или ValuesListQueryset также терпит неудачу. Есть ли лучший способ, чем использовать цикл for?
Ответы
Ответ 1
Использование: object.m2mfield.add(*items)
, как описано в документации:
add()
принимает произвольное количество аргументов, а не их список.
add(obj1, obj2, obj3, ...)
Чтобы развернуть этот список в аргументы, используйте *
add(*[obj1, obj2, obj3])
Добавление:
Django не вызывает obj.save()
для каждого элемента, но вместо этого использует bulk_create()
.
Ответ 2
Чтобы добавить, Если вы хотите добавить их из набора запросов
Пример
# 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)
От: Вставить результаты запроса в ManytoManyfield
Ответ 3
Django 1.9 добавляет дополнительные способы добавления к отношениям "многие ко многим".
Документация: https://docs.djangoproject.com/en/1.9/ref/models/relations/#django.db.models.fields.related.RelatedManager.set
set
- новая тонкость:
>>> new_list = [obj1, obj2, obj3]
>>> e.related_set.set(new_list)