2010-06-18 15 views
15

Sé la respuesta breve porque lo probé. ¿Hay alguna forma de lograr esto (aunque solo sea por un truco)?Django - ¿Se puede usar la propiedad como el campo en una función de agregación?

class Ticket(models.Model): 
    account = modelfields.AccountField() 
    uuid = models.CharField(max_length=36, unique=True) 
    created = models.DateTimeField(auto_now_add=True) 

    class Meta: 
     ordering = ['created'] 

    @property 
    def repair_cost(self): 
     # cost is a @property of LineItem(models.Model) 
     return self.lineitem_set.aggregate(models.Sum('cost')) 
+0

Realmente necesita mostrar el modelo LineItem también. –

Respuesta

17

No. Todo lo que pasa por un administrador incorporado tiene que ser un campo real, ya que solo tocan la base de datos. Para trabajar con una propiedad, tendrían que convertir todos los registros de la tabla en un modelo y luego filtrarlos en Python.

+0

gracias. Pensé que ese podría ser el caso. Me imaginé 'obtener todos los elementos de línea y luego llamar a su propiedad de costo' pero eso sería muy caro :( – orokusaki

3

Tengo un escenario similar y quiero exactamente la misma característica. Lo resolví trivialmente con la siguiente línea:

... 
return sum(lt.cost for lt in self.lineitem_set) 
Cuestiones relacionadas