Как я могу установить данные свойства в поле модели в django

 class Project(models.Model):
   index = models.IntegerField()
   
   @property
   def index(self):
     function = self.function.name
     frac = self.fraction.name
     operation = self.operation.name
     if function == 'Production' and operation == '2C':
        return frac*9
    

Что я пытаюсь сделать, так это установить возвращаемое значение из свойства index в поле index. Не обращайте внимания на переменные function, frac и operation

Я дам вам 3 варианта.

1- Вы можете использовать метод save для установки значения при создании:

class Project(models.Model):
   index = models.IntegerField(null=True, blank=True)

   def save(self, *args, **kwargs):
      if self._state.adding:
         function = self.function.name
         frac = self.fraction.name
         operation = self.operation.name
         if function == 'Production' and operation == '2C':
           self.index = frac*9
    
      super().save(*args, **kwargs)

2- Вы можете просто обновить экземпляр без свойства:

instance = Project.objects.all()[0]
function = instance.function.name
frac = instance.fraction.name
operation = instance.operation.name
if function == 'Production' and operation == '2C':
   instance.index = frac*9
   instance.save()

3- Если вы действительно хотите использовать свойство, сначала вам нужно изменить его имя, чтобы избежать конфликтов:

class Project(models.Model):
   index = models.IntegerField()
   
   @property
   def index_value(self):
     function = self.function.name
     frac = self.fraction.name
     operation = self.operation.name
     if function == 'Production' and operation == '2C':
        return frac*9
     else:
        # Returns something else

Затем вы можете присвоить его полю:

instance = Project.objects.all()[0]
instance.index = instance.index_value
instance.save()
Вернуться на верх