2009-04-06 6 views
2

Je voudrais fusionner un objet connexe de queuysets avec un autre objet connexe de queries. Quelques exemples de code pour expliquer:Django: Comment fusionner deux jeux de requête liés dans Django 0.96?

## Models 
# sample models to illustrate problem 
class PetShop(models.Model): 
    id = models.AutoField(primary_key=True) 
    shop_name = models.CharField(maxlength=255) 
    cats = models.ManyToManyField(Cat) 

class Cat(models.Model): 
    id = models.AutoField(primary_key=True) 
    cat_name = models.CharField(maxlength=50, blank=True) 


## View 
def MergePetsInShop(request): 
    source_shop = PetShop.objects.get(pk=2) 
    destination_shop = PetShop.objects.get(pk=3) 

    #Somehow merge CATS from one shop to the other 
    result = merge(source_shop.cats,destination_shop.cats) 

    #save() 

Comment puis-je faire cela correctement?

Merci beaucoup.

Répondre

1

Vous pouvez tirer parti du fait que les fonctions de gestion plusieurs-à-plusieurs de Djangoet remove acceptent n'importe quel nombre d'arguments positionnels. Dans ce cas, je vais essayer:

destination_shop.cats.add(*source_shop.cats.all()) 
0

Je recommande fortement la méthode Jarrets ci-dessus. Dans le cas où quelqu'un voulait voir la solution que je presque vide, mais n'a pas (cela ne fonctionne par ailleurs si c'est ce que vous avez besoin):

@login_required 
def MergePetsBetweenShops(request): 
    src = int(request.__getitem__("source_shop")) 
    dest = int(request.__getitem__("destination_shop")) 
    srcShop = PetShop.objects.get(pk=src) 
    destShop = PetShop.objects.get(pk=dest)  
    srcPets = srcShop.cats.all() 
    amtMerged = srcPets.cats.count() 
    for p in srcPets: 
     destShop.cats.add(p) 
     destShop.save() 
    return HttpResponse("Cats that were moved: "+str(amtMerged), mimetype='application/javascript') 

noms de méthode, vars utilisés sont fictivement, pour protéger les innocents.

Questions connexes