2009-04-06 4 views
2

1つのクエリーセット関連オブジェクトを別のクエリーセット関連オブジェクトとマージしたいと思います。 いくつかのサンプルコードを説明しますDjango:Django 0.96で2つの関連するクエリーセットをマージするには?

## 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() 

どのように私はこれを適切に行うことができますか?

多くのありがとうございます。

答えて

1

Djangoの多対多のマネージャ機能addremoveは、任意の数の位置引数を受け入れることができます。この場合、私は試してみます:

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

上記のJarretsメソッドを強くお勧めします。場合には、誰かが(それは何が必要かどうこれを経由して作業を行う)私はほとんど使用した溶液を見たかったけどなかった。

@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') 

メソッド名を、使用するVARSは無実を保護するために、架空のです。