Django:有没有一种方法可以序列化一个模型字段而不是模型?

2024-03-29 05:11:09 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以实现一个字段的序列化程序?你知道吗

我有一个自定义字段,它是模型.TextField像这样:

class UpperCaseField(models.TextField):
   pass

我想把它用在这样的人形模型中:

class Person(models.Model):
   first_name = models.TextField()
   last_name = UpperCaseField()

用户可以这样创建Person对象:

student = Person(first_name='John', last_name='Doe')

但是我想把它保存为John DOE,而不是John Doe。你知道吗

对于每个保存的对象,我想在保存DB之前将last_name转换为大写。所以我需要为UpperCaseField编写一个序列化程序。我该怎么做?我知道我可以使用预保存信号,也可以重写model的save方法,但所有这些解决方案都是模型级解决方案。我想在字段级别上做,所以我不必在我使用UpperCaseField作为字段的任何其他模型上重复相同的逻辑。你知道吗

谢谢你的时间!你知道吗


Tags: 对象方法name模型程序序列化modelsjohn
1条回答
网友
1楼 · 发布于 2024-03-29 05:11:09

您是在问DRF上下文中的序列化程序吗?如果是这样的话,我认为您要做的是提供一种反序列化的方法,所以字段将以大写形式保存。你知道吗

您可以通过子类化字段来定义自定义序列化程序字段,如下所述:https://www.django-rest-framework.org/api-guide/fields/#custom-fields。在to \u internal \u value方法中,可以将值转换为大写。然后在模型序列化程序中,可以将此自定义字段用于要保存为大写的模型字段。您不需要定义一个定制的模型字段,只要serializer字段就足够了。你知道吗

相关问题 更多 >