如何让模型对象记住字段的pre_save结果?

时间:2019-08-16 09:50:28

标签: django django-signals

我有一个模型Task和两个计算字段keykey_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来进行计算吗?

0 个答案:

没有答案