Как я могу установить данные свойства в поле модели в 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()