Django rest framework how to access field in serializer

Viewed 9200

I have a model called Video

class Video(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    name = models.CharField(max_length=100, blank=False, null=False, default='', unique=True)
    file = models.FileField(upload_to='videos/', blank=False, null=False)
    owner = models.ForeignKey('auth.User', related_name='videos', on_delete=models.CASCADE, verbose_name='')

    def __str__(self):
        return self.name + ': ' + self.file.name

    class Meta:
        ordering = ('created',)

And its serializer:

class VideoSerializer(serializers.ModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.username')

    class Meta:
        model = Video
        fields = ['name', 'file', 'owner']

I was trying to access the field in serializer in my view because I need it to do some processing:

def post(self, request):
    serializer = VideoSerializer(data=request.data)
    if serializer.is_valid():
        # I need the name of the file!!!!!
        # accessing the fields below
        print(serializer.name)
        print(serializer.file.name)
        # accessing the fields above
        serializer.save(owner=request.user)
        videos = Video.objects.filter(owner=request.user)
        return Response({'videos': videos, 'serializer': VideoSerializer(), 'style': self.style})
    return Response(data=None, status=status.HTTP_400_BAD_REQUEST, template_name='videoserver/error.html')

But when I make request it will report this error:

AttributeError: 'VideoSerializer' object has no attribute 'name'

and

AttributeError: 'VideoSerializer' object has no attribute 'file'

Any advice would be greatly appreicated!!

1 Answers

The error might be in your print() statement.If the serializer valid, the serialized data will be available in serializer.data.

So, it should be

serializer.data['name']
instead of
serializer.name

Related