Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

662
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda