【发布时间】:2019-03-14 20:38:12
【问题描述】:
有没有办法为字段实现序列化程序?
我有一个自定义字段,它是 models.TextField 的子类,如下所示:
class UpperCaseField(models.TextField):
pass
我想在这样的 Person 模型中使用它:
class Person(models.Model):
first_name = models.TextField()
last_name = UpperCaseField()
用户可以像这样创建 Person 对象:
student = Person(first_name='John', last_name='Doe')
但我想将其保存为John DOE,而不是John Doe。
对于每个对象保存,我想在保存数据库之前将last_name 转换为大写。所以我需要为UpperCaseField 编写一个序列化程序。我怎样才能做到这一点?我知道我可以使用预保存信号或者我可以覆盖模型的 save 方法,但所有这些解决方案都是模型级解决方案。我想在字段级别执行此操作,因此我不必在使用UpperCaseField 作为字段的任何其他模型上重复相同的逻辑。
感谢您的宝贵时间!
【问题讨论】:
-
对于那些想知道的人,我相信
get_prep_value解决了我的问题。我会进行研究和必要的测试,然后希望能用答案更新我的问题。 -
这与序列化无关。
标签: python django python-3.x serialization orm