2009-04-06 3 views
2

Ich möchte eine Abfrage Objekte zusammen mit anderen Objekten in Verbindung setzen. Einige Code-Beispiel zu erklären:Django: Wie füge ich zwei verwandte Suchanfragen in Django 0.96 zusammen?

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

Wie kann ich dies richtig tun?

Vielen Dank.

Antwort

1

Sie können die Tatsache nutzen, dass Djangos Viele-zu-Viele-Manager-Funktionen add und remove eine beliebige Anzahl von Positionsargumenten akzeptieren. In diesem Fall würde ich versuchen:

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

Ich empfehle Jarrets Methode oben. Falls jemand wollte die Lösung, die ich fast verwendet, um zu sehen, aber nicht (diese durch die Art und Weise funktioniert, wenn es ist, was Sie brauchen):

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

Namen Methode Vars verwendet ficticious sind, um die Unschuldigen zu schützen.

Verwandte Themen