python - tutorial - Se requiere campo de serializador de Django REST Framework=falso
serializer create django (3)
de la documentación:
read_only Establezca esto en True para asegurarse de que el campo se utiliza al serializar una representación, pero no se usa cuando se actualiza una instancia durante la deserialización.
Predeterminado a falso
requerido Normalmente, se generará un error si no se proporciona un campo durante la deserialización. Establézcalo en falso si no es necesario que este campo esté presente durante la deserialización.
El valor predeterminado es True.
Así que tengo un modelo que tiene un campo que no admite nulos, pero quiero que se rellene en el método pre_save, por lo que he configurado el campo required=False
en el serializador, pero parece que no funciona. Todavía estoy recibiendo un error al guardar el registro.
class FavoriteListSerializer(serializers.ModelSerializer):
owner = serializers.IntegerField(required=False)
class Meta:
model = models.FavoriteList
Actualización: He agregado serializer_class = serializers.FavoriteListSerializer
al ViewSet, ahora en lugar de get This field is required
, creo que pasó la validación pero luego estoy obteniendo This field cannot be null.
He comprobado que el método pre_save no se está ejecutando, ¿alguna idea?
En caso de que alguien aterrice aquí con un problema similar, preste atención a los siguientes atributos junto con los required
:
Si se establece en
True
, la cadena vacía se debe considerar un valor válido.
Normalmente se generará un error si se pasa
None
a un campo de serializador.
required :
Normalmente se generará un error si no se proporciona un campo durante la deserialización.
Estaba rebuscando para descubrir por qué estaba obteniendo un error de validación con required=False
donde había perdido el atributo allow_null
.
Entrada tardía a este hilo. Este problema se corrigió en django-rest-framework 2.3.13 . Aquí está el enlace del PR .
Sí, me encontré con este problema en algún momento también. También debe actualizar las exclusiones de validación.
class FavoriteListSerializer(serializers.ModelSerializer):
owner = serializers.IntegerField(required=False)
class Meta:
model = models.FavoriteList
def get_validation_exclusions(self):
exclusions = super(FavoriteListSerializer, self).get_validation_exclusions()
return exclusions + [''owner'']