当我尝试创建新的模型字段类型时,我遇到了问题 - postgres time []。
感谢psycopg2,数据库中的信息已准备好并转换为python列表。
列表看起来像是这样:
[[datetime.time(0, 0), datetime.time(23, 59, 59)], [datetime.time(0, 0), datetime.time(23, 59, 59)], [datetime.time(0, 0), datetime.time(23, 59, 59)], [datetime.time(0, 0), datetime.time(23, 59, 59)], [datetime.time(0, 0), datetime.time(23, 59, 59)], [datetime.time(0, 0), datetime.time(23, 59, 59)], [datetime.time(0, 0), datetime.time(23, 59, 59)]]
现在我可以创建使用JavaScript将其转换为时间的小部件。但在我看来,它可以在python方面更快地完成,并且因为各种时间选择器小部件处理%H中的时间:%M:%S格式,看起来明智的是以相同的格式获取和提供数据。将数据转换回字符串,即'datetime.time(0,0)'看起来也不是很好。
所以,这一切让我想问 - 在数据库读取后调用django.db.models.fields.Field类的方法是什么?从https://docs.djangoproject.com/en/dev/howto/custom-model-fields/它看起来应该是Field.to_python,但当我添加方法时:
def to_python(self, value):
return 'xxx'
到我的领域,然后我仍然看到我之前添加的日期时间列表不是'xxx'
有人可以帮我解决这个问题:)
艾伦
答案 0 :(得分:0)
在网上挖掘后,我发现了一个解决方案 - 信号。
def loads(value)
#do value conversion here
def contribute_to_class(self, cls, name):
super(MyFieldName, self).contribute_to_class(cls, name)
signals.post_init.connect(self.post_init, cls, True)
def post_init(self, **kwargs):
instance = kwargs['instance']
value = self.value_from_object(instance)
if value:
setattr(instance, self.attname, str(loads(value)))
else:
setattr(instance, self.attname, None)
基本上就是这样。