【发布时间】: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