Сортировка Django QuerySet по свойству (не по полю) модели

Некоторый код и моя цель

Моя (упрощенная) модель:

class Stop(models.Model):
    EXPRESS_STOP = 0
    LOCAL_STOP   = 1

    STOP_TYPES = (
        (EXPRESS_STOP, 'Express stop'),
        (LOCAL_STOP, 'Local stop'),
    )

    name = models.CharField(max_length=32)
    type = models.PositiveSmallIntegerField(choices=STOP_TYPES)
    price = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)

    def _get_cost(self):
        if self.price == 0:
            return 0
        elif self.type == self.EXPRESS_STOP:
            return self.price / 2
        elif self.type == self.LOCAL_STOP:
            return self.price * 2
        else:
            return self.price    
    cost = property(_get_cost)

Моя цель : Я хочу отсортировать по cost . Я пробовал два подхода.

Использование API QuerySet order_by

Stops.objects.order_by('cost')

Это привело к следующей ошибке шаблона:

Caught FieldError while rendering: Cannot resolve keyword 'cost' into field.

Использование фильтра шаблона dictsort

{% with deal_items|dictsort:"cost_estimate" as items_sorted_by_price %}

Получена следующая ошибка шаблона:

Caught VariableDoesNotExist while rendering: Failed lookup for key [cost] in u'Union Square'

Итак ...

Как мне это сделать?

9
задан Belmin Fernandez 14 November 2010 в 01:46
поделиться