Django : Django 0.96에서 두 개의 관련 쿼리 세트를 병합하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/720966

문제

하나의 쿼리 세트 관련 객체를 다른 쿼리 세트 관련 객체와 병합하고 싶습니다. 설명 할 일부 샘플 코드 :

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

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

많은 감사합니다.

도움이 되었습니까?

해결책

Django의 다수의 관리자가 기능한다는 사실을 활용할 수 있습니다. add 그리고 remove 자세한 논증을 수락하십시오. 이 경우 시도해 볼 것입니다.

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

다른 팁

위의 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는 가상입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top