es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

valor nulo en la columna “user_id” viola la restricción de no nulo en la solicitud POST, serializador

Este es mi punto de vista y mi serializador,
cuando envío algunos datos, obtengo un valor nulo en la columna “id de usuario” que viola la restricción de no nulo
después de pasar también el id de usuario, el mismo problema persiste

puntos de vista

serializer_class = subSerializer()

class subView():
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)

serializer.py

class UserSerializer(serializers.ModelSerializer):
………………..

class subSerialzier(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
class Meta:
model = RecipeSubmission
fields = (
‘id’,
‘user’,
‘nombre’,
…….)

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar con la columna “user_id” que viola la restricción de no nulo incluso después de pasar el user_id en la vista. Al ver el código proporcionado, parece que estás utilizando un enfoque de serializador anidado con “UserSerializer” y “subSerializer” como los serializadores.

    Suponiendo que el modelo “RecipeSubmission” tiene un campo “user_id” que no puede ser nulo, el problema podría ser porque estás utilizando “UserSerializer” en modo solo lectura con “read_only=True”. Esto significa que no puedes crear ni actualizar un objeto de usuario a través de este serializador.

    Para solucionar este problema, es posible que debas modificar “UserSerializer” para incluir un campo de solo escritura para user_id. Aquí tienes un ejemplo:

    class UserSerializer(serializers.ModelSerializer):
        user_id = serializers.IntegerField(write_only=True)
    
        class Meta:
            model = User
            fields = (
                'user_id',
                'username',
                'email',
                ...
            )
    

    También puedes agregar este campo “user_id” a “subSerializer” y luego pasarlo junto con los otros campos al crear un nuevo objeto “RecipeSubmission”.

    Otro enfoque podría ser modificar la vista para pasar la instancia de usuario o el user_id al serializador en el formato correcto:

    class subView():
        user_id = request.data.get("user_id") # suponiendo que user_id se pasa en request.data
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save(user_id=user_id) # pasar user_id al método save
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    

    Esto pasará el user_id al método “save” del serializador y creará un nuevo objeto “RecipeSubmission” con el user_id correcto.

Comments are closed.