在我的名为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
答案 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()