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())
نصائح أخرى
أنا نوصي بشدة طريقة الجراحات أعلاه. في حال كان شخص ما أراد أن يرى الحل الذي استخدمته تقريبا ولكنه لم يكن (هذا يعمل بالمناسبة إذا كان ما تحتاجه):
@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')
أسماء الأساليب، وهاركس المستخدمة هي خيالية، لحماية الأبرياء.
لا تنتمي إلى StackOverflow