Уведомления

Группа в Telegram: @pythonsu

#1 Март 11, 2010 21:03:37

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

Поле или метод?

Скажем, есть в модели 3 поля, которые отвечают за цены на 3 детали. А общая цена - это сумма всех трех цен.
Как лучше организовать модель?
Создать еще одно поле и ловить сигнал, по типу:

def order_pre_save(instance, **kwags):
instance.price = instance.price1 + instance.price2 + instance.price3
models.signals.pre_save.connect(order_pre_save, sender=Order)
или лучше создать метод, по типу:
def total_price(self):
return self.price1 + self.price2 + self.price3
Мне кажется, что делать метод - это красивее, но его можно отображать в админке только в list_display, а в fieldsets - нельзя.
Но, метода будет высчитывать каждый раз при обращении, а сигнал - только когда сохраняется модель…

Что лучше и как поступаете в этом случае Вы? Спасибо.



Офлайн

#2 Март 11, 2010 21:16:21

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

Поле или метод?

все зависит от того где это нужно, если у парочки объектов вывести просто сумму то пойдет и метод.
Чтобы держать это в базе нужен какой то аргумент типа нужна выборка с сортировкой по этому полю, или что либо подобное где оно облегчит вычисление.



Офлайн

#3 Март 11, 2010 22:30:45

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Поле или метод?

Когда-то делал очки рейтинга для объектов. Сначала делал методом, но потом переделывал сигналом - методом было довольно неудобно пользоваться, да и сортировка с выборкой максимального/минимального значения оказалась чаще, чем я думал.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version