gpt4 book ai didi

python - Django:有没有办法序列化模型字段而不是模型?

转载 作者:太空宇宙 更新时间:2023-11-03 21:09:24 27 4
gpt4 key购买 nike

有没有办法为字段实现序列化器?

我有一个自定义字段,它是 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 作为字段的任何其他模型上重复相同的逻辑。

感谢您的宝贵时间!

最佳答案

您是否在询问 DRF 上下文中的序列化器?如果是这样,我认为你想要做的是提供一种反序列化的方式,因此字段将以大写形式保存。

您可以通过子类化 Field 来定义自定义序列化器字段,如下所述:https://www.django-rest-framework.org/api-guide/fields/#custom-fields 。在to_internal_value方法中,您可以将值转换为大写。然后在模型序列化器中,您可以将此自定义字段用于要保存为大写的模型字段。您不需要定义自定义模型字段即可使其工作,只需序列化器字段就足够了。

关于python - Django:有没有办法序列化模型字段而不是模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55171568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com