Django: Создание новых атрибутов модели из текущих переменных модели
Поскольку я новичок в Django, я практикуюсь в создании приложения для экономии денег. В приложении я хочу создавать атрибуты модели из текущего ввода модели. Созданные пользователем поля модели выглядят следующим образом:
class Items(models.Model):
user = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True, blank=True)
item_name = models.CharField(max_length=200, null=False, blank=False, default='Enter name')
item_category = models.ForeignKey(Categories, null=True, blank=True, on_delete=models.SET_NULL)
item_created_at = models.DateTimeField(auto_now_add=True, null=True, blank=False)
item_start_date = models.DateField(null=True, blank=False)
item_end_date = models.DateField(null=True, blank=False)
item_purchase_price = models.FloatField(null=True, blank=False)
item_rest_value = models.FloatField(null=True, blank=False)
def __str__(self):
return self.item_name
Используя четыре из этих полей (item_start_date, item_end_date, item_purchase_price, item_rest_value), я хочу вычислить несколько вещей.
- Цель экономии (цена покупки - остаточная стоимость)
- Период сохранения в днях (дата окончания - дата начала)
- Прошедшие дни (дата окончания - текущая дата)
Я попробовал сделать следующее:
def __init__(self, item_name, item_start_date, item_end_date, item_purchase_price, item_rest_value):
self.item_name = item_name
self.item_start_date = item_start_date
self.item_end_date = item_end_date
self.item_purchase_price = item_purchase_price
self.item_rest_value = item_rest_value
def get_saving_goal(self, item_purchase_price, item_rest_value):
return self.item_purchase_price - self.item_rest_value
def get_date_delta(self, item_end_date, item_start_date):
return self.item_end_date - self.item_start_date
def get_days_passed(self, ):
from datetime import date
today = date.today()
return today - self.item_start_date ## probably will need something like a datediff function
Вопрос 1: Однако, когда я добавляю эти методы под полями модели, появляется эта ошибка. Как мне это решить?
init() принимает 6 позиционных аргументов, но было задано 10
Вопрос 2: Помимо ошибки, мне интересно, как я могу использовать эти методы в качестве поля. Другими словами, как я могу использовать результаты метода так же, как и поля модели?
В итоге я решил эту проблему следующим образом (перезаписав функцию save()):