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

498
Vistas
Cómo forzar al usuario actual a un campo en Django Rest Framework

Considere que tengo modelos, un serializador y un conjunto de vistas como se muestra a continuación:

 # models.py class Foo(models.Model): owner = models.ForeignKey(User, models.CASCADE, related_name="bars") # serializers.py class FooSerializer(serializers.ModelSerializer): owner = serializers.PrimaryKeyRelatedField( default=serializers.CurrentUserDefault(), queryset=User.objects.all(), ) class Meta: fields = ["pk", "owner"] # viewsets.py # registered to /api/foos/ class FooViewSet(viewsets.ModelViewSet): serializer_class = FooSerializer permission_classes = [permissions.IsAuthenticated] queryset = Foo.objects.all()

Entonces, cuando envío una solicitud POST a /api/foos/ con un cuerpo vacío, crea una instancia de Foo con su campo de owner establecido en el usuario que inició sesión actualmente, lo cual está bien.

Sin embargo, también quiero ignorar por completo lo que el usuario actualmente autenticado envía como valor al owner . Por ejemplo, si hago una solicitud POST a /api/foos/ con body user=5 (otro usuario, básicamente), CurrentUserDefault establece Foo.owner para ese usuario, que no es el comportamiento que quiero tener.

Siempre quiero tener el usuario autenticado actual como el valor del owner del campo de una nueva instancia de Foo o, en otras palabras, quiero que el campo FooSerializer.owner se establezca como usuario autenticado actualmente como un valor e ignorar lo que se envía en Solicitud POST como valor de owner .

¿Cómo puedo hacer eso?

Gracias por adelantado.


Medioambiente

  • Django ^2.2
  • djangorestframework ^3.12.4
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Dado que no desea que el owner sea modificable a través de su serializador, le sugiero que elimine el campo del serializador o que sea de solo lectura .

A continuación, puede establecer el propietario utilizando el método de save del serializador que le permite inyectar datos adicionales .

Un buen lugar para esto en su ejemplo sería el método perform_create de su ModelViewSet . Por ejemplo:

 class FooViewSet(viewsets.ModelViewSet): serializer_class = FooSerializer permission_classes = [permissions.IsAuthenticated] queryset = Foo.objects.all() def perform_create(self, serializer): serializer.save(owner=self.request.user)
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