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

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

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 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