Basé sur le Django doc, je devrais être capable de transmettre plusieurs objets à la fois pour les ajouter à une relation multiple mais je reçois
* TypeError: type inshashable: 'list'
lorsque j'essaie de transmettre un ensemble de requêtes Django dans une liste. Le passage d'un ensemble de requêtes ou d'un ValuesListQueryset semble également échouer. Existe-t-il un meilleur moyen que d'utiliser une boucle for?
Utilisez: object.m2mfield.add(*items)
comme décrit dans la documentation :
add()
accepte un nombre arbitraire d'arguments, pas une liste d'entre eux.
add(obj1, obj2, obj3, ...)
Pour développer cette liste en arguments, utilisez *
add(*[obj1, obj2, obj3])
Django n'appelle pas obj.save()
pour chaque élément, mais utilise plutôt bulk_create()
.
Pour ajouter dessus, si vous voulez les ajouter à partir d'un queryset
Exemple
# 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)
De: Insérer les résultats de la requête dans ManytoManyfield
Django 1.9 ajoute des moyens supplémentaires d’ajouter à une relation plusieurs à plusieurs.
Documentation: https://docs.djangoproject.com/fr/1.9/ref/models/relations/#Django.db.models.fields.related.RelatedManager.set
set
est une nouvelle gentillesse:
>>> new_list = [obj1, obj2, obj3]
>>> e.related_set.set(new_list)