Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

654
Vistas
Comprensión del requisito para que el campo relacionado proporcione un conjunto de consultas

Considerar:

 class CouponSerializer(serializers.ModelSerializer): courses = serializers.PrimaryKeyRelatedField( many=True, read_only=True) class Meta: model = Coupon exclude = ['users']

Si read_only=True , obtengo el error:

 AssertionError: Relational field must provide a `queryset` argument, override `get_queryset`, or set read_only=`True`.

La documentación dice:

El conjunto de consultas utilizado para las búsquedas de instancias de modelo al validar la entrada de campo. Las relaciones deben establecer un conjunto de consultas explícitamente o establecer read_only=True

¿Cuál es la lógica que subyace a este requisito? ¿Por qué no existe tal requisito para StringRelatedField ?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

necesita agregar ready_only si solo usará este serializador para ver datos o usará el argumento queryset si desea guardar datos, esto permite que el serializador valide los datos antes de guardarlos en la base de datos

ejemplo

 class CouponSerializer(serializers.ModelSerializer): courses = serializers.PrimaryKeyRelatedField( many=True, queryset = Course.objects.all() ) class Meta: model = Coupon exclude = ['users']

esto al validar datos si no hay cursos en su lista de cursos generará un error

over 4 years ago · Santiago Trujillo Denunciar

0

Django Rest Framework tiene que saber qué conjunto de consultas buscar si el número que el usuario envía en la solicitud es válido.

Digamos que un usuario envía una solicitud POST a su vista que usa este serializador. Con una carga útil como esta:

 { "courses": [1, 2, 3] }

Entonces, queremos crear una instancia de Coupon con los courses de campo para que se complete con las instancias de Course con id 1, 2 y 3.

DRF validará esta solicitud para asegurarse de que las claves primarias 1, 2 y 3 existan en el Course modelo. Si no agregamos queryset = Course.objects.all() entonces DRF no sabe en qué modelo mirar.

La razón por la que no tiene que agregar a StringRelatedField es porque ese tipo de campo es de solo lectura de manera predeterminada.

Editar:

Si usa read_only=True , DRF verificará el modelo en el mismo nombre de campo que ha definido en el serializador. En su serializador de ejemplo, ha nombrado los courses campo, por lo que DRF verificará el modelo en busca de un campo llamado courses y sabrá que es un campo de muchos a muchos, por lo que obtendrá todas las claves principales de eso.

Podría preguntarse por qué DRF no hace lo mismo en escritura. Es decir, use el nombre de campo del serializador para averiguar a qué modelo se refiere el campo en el modelo. Sin embargo, no tengo una buena respuesta para esto.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda