2009-04-06 4 views
2

하나의 querysets 관련 개체를 다른 querysets 관련 개체와 병합하고 싶습니다. 일부 샘플 코드는 설명하기 :Django : 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() 

어떻게이 제대로 할 수 있습니까?

감사합니다.

답변

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

방법 이름, 무고한 사람들을 보호하기 위해, 허구이다 사용 바르.