我有一个模型Task
和两个计算字段key
和key_sort
,还有一个相关字段content_object
。
key
应该从相关对象中复制:self.content_object.key
key_sort
应该是key
中值的变体(适合自然排序,因此A10
变成a0010
,但这是另一回事了)我已经使用覆盖pre_save
的自定义字段实现了这一点:
class KeyField(CharField):
def pre_save(self, model_instance, add):
return model_instance.content_object.key
class NatsortField(CharField):
# ...
def pre_save(self, model_instance, add):
return natsort_str(getattr(model_instance, self.for_field))
class Task(Model):
key = KeyField()
key_sort = NatsortField(for_field='key')
content_object = ForeignKey(Thing)
保存时,key
字段已正确保存到数据库,但是模型实例未更新,因此在pre_save
字段的key_sort
中,{ {1}}不可用。因此,key
字段将无法正确计算。
key_sort
中更新model_instance
吗?pre_save
并通过覆盖CharField
来进行计算吗?