每次自动更新模型字段

时间:2017-04-03 17:04:04

标签: django django-models

在我的名为XBlockState的模型中,我有多个字段,其中有场景 scenarioID 这样定义

scenario = models.CharField(
    max_length=255,
    blank=True,
    null=True,
    db_index=True,
)
scenarioID = models.CharField(
    max_length=255,
    blank=True,
    null=True,
    db_index=True,

)

我需要使用以下格式将scenarioID值设置为

  

scenario.0

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解正确:

1 /您的意思是 scenarioID是自己的字段,在这种情况下:

views.py

new_scenario = XBlockState.objects.create(
    scenario = "Django Unchained",
    scenarioID = "0"
    )
new_scenario.save()

2 /或者您希望scenarioID成为主键的计算字段,在这种情况下,您可能需要查看以下内容:

models.py

class XBlockState(models.Model):
    ## other fields
    ...
    #scenarioField

    scenario = models.CharField(
        max_length=255,
        blank=True,
        null=True,
        db_index=True,
    )

    def scenarioID(self):
        return self.scenario+"."+str(self.pk)

您可以使用类似

之类的内容访问该字段
xblockstate_instance.scenarioID()

答案 1 :(得分:0)

它可能不是最干净但它应该做的伎俩:

您可以添加scenarioID字段

scenarioID = models.CharField(max_length=255, blank=True)

并覆盖save方法以在每次保存元素时强制更新。然后,您可以访问它并将其用于过滤和序列化对象。

## in models.py ##

class XBlockState(models.Model):
## other fields
...
#scenarioField

scenario = models.CharField(
    max_length=255,
    blank=True,
    null=True,
    db_index=True,
)

def scenarioID_calc_field(self):
    return self.scenario+"."+str(self.pk)

def save(self, force_insert=False, force_update=False, using=None):
    self.scenarioID = self.scenarioID_calc_field() #as defined higher
    super(XBlockState, self).save()