Django: Как добавить пользователя (автора POST-запроса) перед сохранением в сериализаторах? - PullRequest
0 голосов
/ 06 августа 2020

Я пытался добавить автора запроса перед сохранением в serializers.py

И получил ошибку:

Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x0000029169C48040>": "Category_product.posted_user" must be a "User" instance.

моделей. py

class Category_product(models.Model):
    category_name = models.CharField(max_length=200, unique=True)
    posted_user = models.ForeignKey(User, on_delete=models.CASCADE, default=1)

    def __str__(self):
        return self.category_name

views.py

class Category_productDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Category_product.objects.all()
    serializer_class = Category_productSerializer

serializers.py

class Category_productSerializer(serializers.ModelSerializer):
    
    post_user = serializers.ReadOnlyField(
        source='posted_user.username')
    class Meta:
        model = Category_product
        fields = ['id', 'category_name','post_user']
        
        def validate(self, data):
            data['posted_user'] = self.context['request'].user
            return data

1 Ответ

0 голосов
/ 06 августа 2020

Вы пробовали переопределить пользователя в вашем представлении? Предполагая, что у вас настроен Authentacion, потому что, если бы не все могли войти, и это не был бы пользователь, это был бы экземпляр Anonymous User.

Если это не так, вы можете попробовать его в представлении с выполнением создания:

class Category_productDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Category_product.objects.all()
    serializer_class = Category_productSerializer
    
     def get_user(self):
        user = self.request.user
        return user

     def perform_create(self, serializer):
        """
        Set the sender to the logged in user.
        """
        serializer.save(posted_user=self.get_user())
...