Я разбираюсь в скелете django e-shop.Django: товар расширяемый расчет со скидкой
# models.py
class Category(models.Model):
name = models.CharField()
discount = models.DecimalField()
class Product(models.Model):
name = models.CharField()
price = models.DecimalField()
category = models.ForeignKey(Category)
discount = models.DecimalField()
Теперь мне нужно рассчитать окончательную скидку продукта. Это самая большая из дисконтов по продуктам и категориям:
class Product(models.Model):
...
def get_final_discount(self):
return max([self.discount, self.category.discount])
Но теперь мне нужно расширить модели модели Brand. У модели бренда есть своя скидка, поэтому мне нужно изменить метод Product.get_final_discount(), чтобы рассмотреть скидку Брэнд при расчете цены конечного продукта.
Вопрос: что является лучшим способом реализации метода скидки на конечный продукт, который не нарушает принцип открытого закрытия?
Что вы имеете в виду под «Мне нужно, чтобы расширить свои модели с Brand модели»? Вы хотите добавить внешний ключ к категории, продукту или обоим из модели Brand или модели Brand? Или вы хотите модель подкласса Brand? –
@VladimirDanilov Мне нужно добавить FK от продукта к бренду в этом случае. Также я хочу иметь возможность добавлять те же самые FK от продукта к моделям с собственными скидками. –