Доброго времени суток!
Не судите строго, т.к. джанго, да и питон я начал изучать не более трех недель назад. Сейчас пытаюсь ,в качестве обучения,оптимизировать выдачу абонементов и учет занятий в студии.
Подскажите, пожалуйста, как можно рассчитать итоговую цену со скидкой и записать ее в таблицу "Paiments" в поле "finish_price". При этом данные взять из таблицы "Price", которая является внешним ключом для поля "price_of_paiment"
Можно ли использовать "choices=" для подставления данных о скидке или лучше сделать отдельную таблицу с этими данными,т.к. данные в кортеже не будут числовыми?
На просторах интернета нашел использование функции "def get_sale(self):" которую подставил в рассчет абонемента, но так и не понял ,как туда попадут данный из поля "whole_price" для расчета и как потом записать получившийся результат в поле "finish_price".
class Price(models.Model):
name_paiment = models.CharField(primary_key=True, max_length=20, unique=True)
whole_price = models.DecimalField('Цена', default=0, max_digits=10, decimal_places=2)
price_for_one_time = models.DecimalField('Цена за 1 посещение', max_digits=10, decimal_places=2)
number_of_visits = models.IntegerField('Количество посещений')
def __str__(self):
return '%s %s' % (self.name_paiment, self.whole_price)
class Paiments(models.Model):
DISCOUNT = (
('0', 'нет скидки'),
('5', '5%'),
('10', '10%'),
('15', '15%'),
('20', '20%'),
('25', '25%'),
('30', '30%'),
)
paiment_of_student = models.ForeignKey(Student)
price_of_paiment = models.ForeignKey(Priсe, verbose_name='Название абонемента')
discount = models.IntegerField('Скидка в процентах', blank=True, default=0, choices=DISCOUNT)
begin_date = models.DateTimeField('Дата начала', default=timezone.now)
end_date = models.DateTimeField('Дата окончания')
finish_price =
def get_sale(self):
'''Расчитать стоимость со скидкой'''
end_price = int(self.price_of_paiment * (100 - self.discount) / 100)
return end_price
Прошу прощения ,если где-то не правильно выразил мысль. Подскажите,как реализовать мои идеи, по возможности с кодом, т.к. просто на словах не пойму из-за неопытности.