'Django: Fill model fields attributes from current fields

In my current item model, I want to fill the model fields by using calculations within the init.

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)
    item_saving_goal = models.FloatField(default=0, null=True, blank=False)
    item_date_delta = models.FloatField(default=0, null=True, blank=False)
    item_days_passed = models.FloatField(default=0, null=True, blank=False)
    item_currently_saved = models.FloatField(default=0, null=True, blank=False)
    item_percentage_saved = models.FloatField(default=0.01, null=True, blank=False)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.item_saving_goal = self.item_purchase_price - self.item_rest_value
        self.item_date_delta = self.item_end_date - self.item_start_date
        self.item_days_passed = (date.today() - self.item_start_date).float() ## Make date calc
        self.item_currently_saved = self.item_saving_goal * (self.item_rest_value / self.item_date_delta )
        self.item_percentage_saved = self.item_currently_saved / self.item_saving_goal * 100

However, I currently get the following error:

TypeError at /items/ unsupported operand type(s) for -: 'NoneType' and 'NoneType'

C:\Users...\base\models.py, line 43, in init self.item_saving_goal = self.item_purchase_price - self.item_rest_value



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source