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()):

Ответ Джелла для Django: Создание новых атрибутов модели из текущих переменных модели
Вернуться на верх