Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ValueError django rest框架_Python_Django_Django Models_Django Rest Framework - Fatal编程技术网

Python ValueError django rest框架

Python ValueError django rest框架,python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,我正在学习Inigdjango rest framework:身份验证和权限,偶然发现ValueError:无法分配“[]”:“Zip.owner”必须是“用户”实例。我在尝试发布请求时遇到此错误 我的模特 class Zip(models.Model): owner=models.ForeignKey('auth.User',related_name='zips') zip=models.CharField(max_length=96,) state=models.Ch

我正在学习Inigdjango rest framework:身份验证和权限,偶然发现ValueError:无法分配“[]”:“Zip.owner”必须是“用户”实例。我在尝试发布请求时遇到此错误

我的模特

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)
序列化程序.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
错误回溯

  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

如果您有任何帮助,请将您的预存方法更改为:

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

您是否试图发布到
的ZipList
视图?我猜这个错误是因为序列化程序上的
owner
字段是只读的。根据您的版本,预保存可能不起作用。@Coeus您的错误不具体。您正在访问哪些URL?你能说得更具体点吗?@coeus我也有同样的问题。你找到解决办法了吗?