在我的序列化器中,我将模型中的列更改为不同的名称,因为我在API中需要这样做。
- 型号 *:
class User(models.Model):
name = models.CharField(max_length=50, null=True)
telephone_number = models.CharField(max_length=15, null=True, blank=True)
- 串行器 *:
class UserSerializer(serializers.ModelSerializer):
phoneNumber = serializers.CharField(source='telephone_number')
class Meta:
model = User
fields = ('name', 'telephone_number')
但是当我这样做的时候,序列化器没有考虑模型中给定的验证集。
>>> serializer = UserSerializer()
>>> print(repr(serializer))
UserSerializer():
name = CharField(allow_null=True, max_length=50, required=False)
phoneNumber = CharField(source='telephone_number') <- no max_length here
如何调用这些验证,而不需要将它们复制到序列化器中?(当然,我的模型要大得多,这就是我问的原因)
1条答案
按热度按时间jgzswidk1#
当你自己在序列化器主体中声明一个新字段时,它会理解你想要完全覆盖字段的原始定义,并使用你在
serializers.CharField()
中使用的任何属性。使用source
不会像max_length
那样自动复制所有其他属性。一种解决方案是使用
to_internal_value
作为变通方法,重命名字段,而不必将其所有模型属性复制到序列化程序字段。这样,您就可以使用
phoneNumber
作为字段名来接受序列化程序的数据。