2016-05-30 6 views
0

hier ist die models.pyUnable max-Wert erhalten Anmerkungen versehen mit

class StoreProduct(models.Model): 
    product = models.ForeignKey('products.Product') 
    category = models.ForeignKey('products.Category') 
    store = models.ForeignKey('Store') 
    price = models.IntegerField(null=True , blank=True) 
    quantity = models.IntegerField(null=True , blank=True) 
    discount = models.IntegerField(null=True , blank=True) 
    size = models.CharField(max_length=50 , null=True , blank=True) 
    color = models.CharField(max_length=50 , null=True , blank=True) 
    timestamp = models.DateTimeField(auto_now_add=True,auto_now=False) 

    objects = StoreProductManager() 


    def __unicode__(self): 
     return self.product.title 

hier ist die views.py

if discount: 
       max_discount = StoreProduct.objects.filter(product=item).values_list('discount' , flat=True).annotate(Max('discount')) 
       min_price_store = StoreProduct.objects.filter(product=item , discount=max_discount).values_list('store__StoreName' , flat=True) 

       print max_discount, min_price_store 

       if discount > max_discount: 
        item.discount = discount 
        item.save() 

die annotate Abfrage Renditen führen ähnliche

[30L, 20L, 40L] 

Was ich hier will, ist, dass es den maximalen Rabatt zurückgeben sollte..aber es wirft mehrere Ergebnisse wie 20L, 30L, 40L.

was kann ich tun, um den maximalen Wert für den Rabatt zu erhalten?

Vielen Dank.

+0

Das Problem mit Ihre Abfrage besteht darin, dass Sie gerade versuchen, nach dem "Rabatt" -Feld zu gruppieren und dann das "Max()" jeder Gruppe zu finden, das im Grunde die verschiedenen Rabatte an Sie zurückgibt. Der richtige Weg ist die Verwendung von aggregate() '. –

+0

@Aditya Haben Sie eine Antwort zu diesem Beitrag erhalten http://stackoverflow.com/q/37550364/4099593? Sie können in einem Chat-Raum fragen http://chat.stackoverflow.com/rooms/6/python Aber ich weiß nicht, ob Sie dort ab sofort sprechen können. –

+0

Nein, ich habe es nicht bekommen und plus ich bekam negative Bewertungen, so löschte ich es @ BhargavRao –

Antwort

2

sollten Sie verwenden aggregate als annotate nur Objekte in Ihrer Abfrage fügt

storeproduct = StoreProduct.objects.filter(product=item).aggregate(max_discount=Max('discount')) 

storeproduct['max_discount'] den maximalen Rabatt Wert zurück und kann wie so in der nächsten Abfrage verwendet werden:

min_price_store = StoreProduct.objects.filter(product=item , discount=storeproduct['max_discount']).values_list('store__StoreName' , flat=True) 
+0

die zweite Abfrage gibt mehr als ein Ergebnis zurück ... es sollte den Laden mit maximalen Rabatt zurückgeben –

+0

Was ist, wenn es mehr als einen Laden mit der maximaler Rabattwert? –

+0

zeigt es wie folgt {'max_discount': 40} .... wie bekomme ich den Wert aus i t? –

Verwandte Themen