2012-05-19 19 views
5

tengo un modelo básicamente lo siguiente:Django: ¿cómo filtrar una suma de dos campos en un modelo relacionado?

class Unit(models.Model): 
    name = models.CharField(max_length=64) 

class UnitPrice(models.Model): 
    unit  = models.ForeignKey(Unit, related_name="prices") 
    agency_fee = models.DecimalField(default=0.0, max_digits=7, decimal_places=2) 
    owner_fee = models.DecimalField(default=0.0, max_digits=7, decimal_places=2) 
    def amount(self): 
     return self.owner_fee + self.agency_fee 

¿Hay una manera de filtrar para amount (es decir, la suma de agency_fee y owner_fee) de Unit.objects?

Respuesta

10

extra() puede ayudarle a

UnitPrice.objects.extra(where=["agency_fee + owner_fee > 10"]) 
15

o simplemente transformar a + b > c a a > c - b con el fin de utilizar models.F expression:

UnitPrice.objects.filter(agency_fee__gt=10-models.F('owner_fee')) 
Cuestiones relacionadas