I was learninig django rest framework: authentication-and-permissions and was stumbled upon ValueError: Cannot assign "[]": "Zip.owner" must be a "User" instance. I get this error when trying to post a request

my model.py

class Zip(models.Model):
    owner=models.ForeignKey('auth.User',related_name='zips')
    zip=models.CharField(max_length=96,)
    state=models.CharField(max_length=96,  blank=True)

serializer.py

class ZipSerializer(serializers.ModelSerializer):
        zip_owner = serializers.PrimaryKeyRelatedField(many=True, queryset=Zip.objects.all())
        owner = serializers.ReadOnlyField(source='owner.username')

        class Meta:
            model = Zip
            fields = ('id','zip','state','zip_owner')

view.py

class ZipMixin(object):
    queryset = Zip.objects.all()
    serializer_class = ZipSerializer
    permission_calss=(IsOwnerOrReadOnly,)

    def pre_save(self,obj):
        obj.owner=self.request.user


class ZipList(ZipMixin,generics.ListCreateAPIView):
    queryset = Zip.objects.all()
    serializer_class = ZipSerializer

class ZipDetail(ZipMixin,generics.RetrieveUpdateDestroyAPIView):
    queryset = Zip.objects.all()
    serializer_class = ZipSerializer

Error traceback

  Internal Server Error: /api/
  Traceback (most recent call last):
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response
      response = self.process_exception_by_middleware(e, request)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
      response = wrapped_callback(request, *callback_args, **callback_kwargs)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
      return view_func(*args, **kwargs)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
      return self.dispatch(request, *args, **kwargs)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/rest_framework/views.py", line 466, in dispatch
      response = self.handle_exception(exc)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/rest_framework/views.py", line 463, in dispatch
      response = handler(request, *args, **kwargs)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/rest_framework/generics.py", line 246, in post
      return self.create(request, *args, **kwargs)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/rest_framework/mixins.py", line 21, in create
      self.perform_create(serializer)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/rest_framework/mixins.py", line 26, in perform_create
      serializer.save()
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 191, in save
      self.instance = self.create(validated_data)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 846, in create
      instance = ModelClass.objects.create(**validated_data)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/django/db/models/manager.py", line 122, in manager_method
      return getattr(self.get_queryset(), name)(*args, **kwargs)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/django/db/models/query.py", line 399, in create
      obj = self.model(**kwargs)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/django/db/models/base.py", line 431, in __init__
      setattr(self, field.name, rel_obj)
    File "/home/amogh/PycharmProjects/env_1.9/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py", line 207, in __set__
      self.field.remote_field.model._meta.object_name,
  ValueError: Cannot assign "[]": "Zip.owner" must be a "User" instance.
  [06/Mar/2016 18:59:31] "POST /api/ HTTP/1.1" 500 124621

Error SCREENSHOT Any help would be much appreciated

score:0

Change your pre_save method to:

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

Related Query