2012-06-06 4 views
1

Quelle est la méthode de Django pour copier et coller Queryset sauf itérer sur les enregistrements et cloner/enregistrer? E.g. un ensemble d'enregistrements de la table A doit être sélectionné, certains champs mis à jour et les enregistrements insérés dans la table d'origine? Un exemple d'utilisation consiste à ajouter des abonnés de la liste de diffusion A à la liste de diffusion B. Faut-il simplement répéter une boucle sur QuerySet et cloner/enregistrer un enregistrement par enregistrement, ou une méthode d'opération de groupe?Django copier/coller Queryset

+1

"est une méthode pour le fonctionnement de groupe?" Je ne pense pas. "Devrait-il s'agir simplement d'une boucle parcourant QuerySet et clonage/enregistrement d'enregistrement par enregistrement" qui ressemble à 2 lignes de code. – jpic

Répondre

1

Django 1.4 a la méthode bulk_create qui fait son travail dans 1 requête sql

0

Il ne semble pas que vous voulez cloner ou copier ces documents - qui est quelque chose que vous devriez éviter dans une base de données normalisée de toute façon.

Si vous voulez juste de mettre à jour un seul champ, vous pouvez le faire avec la méthode update queryset:

MyModel.objects.filter(mailing_list=list_a).update(mailing_list=list_b) 

Si vous parlez de les ajouter à une autre relation M2M, vous pouvez faire que simplement:

mailing_list_b.users.add(*MyModel.objects.filter(mailing_list=list_a)) 
0

Dans Django 1.3 est la solution à itérer QuerySet et créer des copies comme celle-ci:

from copy import deepcopy 
old_obj = deepcopy(obj) 
old_obj.id = None 
old_obj.save()