передать имя пользователя из токена, чтобы сохранить имя пользователя в модели - PullRequest
0 голосов
/ 11 января 2020

Это файл моей модели с именем поля владельца

class PotholeImages(models.Model):
    """Upload images with details """

    image = models.ImageField(
        upload_to='photos/%Y/%m/%d',
    )

    owner = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        default = 'unknown',
    )

    state_name = models.CharField(
        blank = False,
        max_length = 30,
        default = 'unknown',
    )

    country_name = models.CharField(
        blank = False,
        max_length = 30,
        default = 'unknown',
    )

    name = models.CharField(default=uuid.uuid4, max_length=40)
    cordinate_X = models.DecimalField(max_digits=22, decimal_places=16)
    cordinate_Y = models.DecimalField(max_digits=22, decimal_places=16)
    created_date = models.DateTimeField(auto_now_add=True)
    road_name = models.CharField(max_length = 100, default = 'unknown')

    def __str__(self):
        return self.name

Файл сериализатора

class ImageSerializer(serializers.ModelSerializer):
    """Uploading Pothoele Images"""

    class Meta:
        model = PotholeImages
        fields = ('image','state_name', 
                    'country_name','cordinate_X',
                    'cordinate_Y','road_name',)

    def to_representation(self, instance):
        rep = super(ImageSerializer, self).to_representation(instance)
        rep['owner'] = instance.owner.username
        # print(rep)
        return rep

просмотр файла

class ImageViewSet(viewsets.ModelViewSet):
    authentication_classes = (TokenAuthentication,)
    permission_classes = (IsAuthenticated,)
    queryset = PotholeImages.objects.all()
    serializer_class = serializers.ImageSerializer

    def perform_create(self, serializer):
        print(self.request.user)
        serializer.save(user=self.request.user)

Я хочу, когда бы человек ни отправляет запрос на сообщение

http://127.0.0.1: 8000 / images_api / imageView /

Затем из токена обнаруживается имя пользователя, и оно должно быть передано в поле владельца имя.

Может кто-нибудь, пожалуйста, помогите

Спасибо

1 Ответ

0 голосов
/ 12 января 2020

Наконец-то я нашел ответ, который сделал через APIView

class ImageAPIView(APIView):
    authentication_classes = (TokenAuthentication,)

    def post(self, request):
        ## username
        user = request.user
        is_tokened = Token.objects.filter(user = user)
        print("user name is ", user)
        data = request.data
        data['owner'] = user.id
        serializer = serializers.ImageSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=200)
        ResponseData = "{} image sent by user".format(user.id)
        return Response(ResponseData, status=status.HTTP_200_OK)



...