我正在尝试让我的模型中的字段写入一次并在之后只读取。我想出的解决方案是使用属性装饰器。请告诉我,如果有更好的解决方案,我是django的新手。当我尝试在django shell中实例化模型时,我进入了一个无限循环。
class MapPointable(models.Model):
loc_latitude = models.FloatField(null = True)
loc_longtitude = models.FloatField(null = True)
@property
def loc_latitude(self):
return self.loc_latitude
@loc_latitude.setter
def loc_latitude(self, value):
if self.loc_latitude == None:
self.loc_latitude = value
else:
raise ValueError("Read-only field, the value cannot be set")
@property
def loc_longtitude(self):
return self.loc_longtitude
@loc_longtitude.setter
def loc_longtitude(self, value):
if self.loc_longtitude == None:
self.loc_longtitude = value
else:
raise ValueError("Read-only field, the value cannot be set")
答案 0 :(得分:1)
您的媒体资源的名称与模型字段的名称相同。它应该是:
@property
def loc_latitude_prop(self):
return self.loc_latitude
@loc_latitude_prop.setter
def set_loc_latitude(self, value):
#...
否则他们开始互相打电话,你会陷入无限循环......
但是我不会在django中使用属性,因为django在ORM中不识别这些,它只知道django字段