【问题标题】:ValueError django rest frameworkValueError Django 休息框架
【发布时间】:2016-06-20 06:15:34
【问题描述】:

我正在学习 django rest framework: authentication-and-permissions,偶然发现 ValueError: Cannot assign "[]": "Zip.owner" must be a "User" instance . 我在尝试发布请求时收到此错误

我的模型.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

错误回溯

  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 任何帮助将不胜感激

【问题讨论】:

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

标签: python django django-models django-rest-framework


【解决方案1】:

将您的 pre_save 方法更改为:

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

【讨论】:

    猜你喜欢
    • 2013-04-08
    • 2021-11-26
    • 1970-01-01
    • 2015-02-25
    • 2016-04-25
    • 2016-03-23
    • 1970-01-01
    相关资源
    最近更新 更多