Django : Django 0.96에서 두 개의 관련 쿼리 세트를 병합하는 방법은 무엇입니까?
-
05-09-2019 - |
문제
하나의 쿼리 세트 관련 객체를 다른 쿼리 세트 관련 객체와 병합하고 싶습니다. 설명 할 일부 샘플 코드 :
## 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는 가상입니다.
제휴하지 않습니다 StackOverflow