Python ValueError django rest框架
我正在学习Inigdjango rest framework:身份验证和权限,偶然发现ValueError:无法分配“[]”:“Zip.owner”必须是“用户”实例。我在尝试发布请求时遇到此错误 我的模特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
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我也有同样的问题。你找到解决办法了吗?