【问题标题】:Django - AttributeError: 'Fichas' object has no attribute 'update'Django - AttributeError:“Fichas”对象没有属性“更新”
【发布时间】:2014-10-14 15:33:05
【问题描述】:

我有一个序列化程序来验证某些字段是否为空。如果一个字段为空,则一切正常,但如果所有字段都正确,我会获得 AttributeError: 'Fichas' object has no attribute 'update'。

这是视图和序列化器:

views.py

class PublicarFichaViewSet(APIView):
    permission_classes = (IsAuthenticated, GroupPermission)
    def get_object(self, pk):
        try:
            return Fichas.objects.get(pk=pk)
        except:
            raise Http404

    def get(self, request, pk, format=None):
        ficha = self.get_object(pk)
        serializer = PublicarFichaSerializer(ficha)
        return Response(serializer.data)

    def put(self, request, pk, format=None):
        ficha = self.get_object(pk)
        serializer = PublicarFichaSerializer(ficha, data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

serializer.py

class PublicarFichaSerializer(serializers.Serializer):
    Centro_responsable = serializers.CharField(required=True, max_length=64)
    Autor_de_la_ficha = serializers.CharField(required=True, max_length=64)
    Correo_electronico_del_autor_de_la_ficha = serializers.EmailField(required=True)
    Autor_del_caso_de_estudio = serializers.CharField(required=True, max_length=64)
    Correo_electronico_del_autor_del_caso_de_estudio = serializers.EmailField(required=True)
    Tutor = serializers.CharField(required=True, max_length=64)
    Correo_electronico_del_tutor = serializers.EmailField(required=True)
    Fecha_de_tutela = serializers.DateField(required=True)
    Titulo = serializers.CharField(required=True, max_length=64)
    Tipo_de_objeto_u_obra_por_su_funcion = serializers.CharField(required=True, max_length=64)
    Plano_de_situacion = serializers.CharField(required=True, max_length=64)
    Fecha_de_validez_legal = serializers.DateField(required=True)
    Ficha_publicada = serializers.BooleanField()

    def validate_Ficha_publicada(self, attrs, source):
        if not attrs['Ficha_publicada']:
            raise serializers.ValidationError("Ficha no publicada")
        return attrs

编辑:追溯

Environment:


Request Method: POST
Request URL: http://localhost:8000/publicarficha/1/

Django Version: 1.6.5
Python Version: 2.7.6
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'corsheaders',
 'rest_framework',
 'phi_catalogo',
 'rest_framework.authtoken',
 'django_evolution',
 'django.contrib.admin',
 'multiselectfield',
 'django_extensions',
 'pytz')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'corsheaders.middleware.CorsMiddleware')


Traceback:
File "/Users/jian/phi/env/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  112.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/jian/phi/env/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
  57.         return view_func(*args, **kwargs)
File "/Users/jian/phi/env/lib/python2.7/site-packages/django/views/generic/base.py" in view
  69.             return self.dispatch(request, *args, **kwargs)
File "/Users/jian/phi/env/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  403.             response = self.handle_exception(exc)
File "/Users/jian/phi/env/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  400.             response = handler(request, *args, **kwargs)
File "/Users/jian/phi/backend/phi_catalogo/views.py" in put
  148.         if serializer.is_valid():
File "/Users/jian/phi/env/lib/python2.7/site-packages/rest_framework/serializers.py" in is_valid
  550.         return not self.errors
File "/Users/jian/phi/env/lib/python2.7/site-packages/rest_framework/serializers.py" in errors
  542.                 ret = self.from_native(data, files)
File "/Users/jian/phi/env/lib/python2.7/site-packages/rest_framework/serializers.py" in from_native
  375.             return self.restore_object(attrs, instance=getattr(self, 'object', None))
File "/Users/jian/phi/env/lib/python2.7/site-packages/rest_framework/serializers.py" in restore_object
  335.             instance.update(attrs)

Exception Type: AttributeError at /publicarficha/1/
Exception Value: 'Fichas' object has no attribute 'update'

【问题讨论】:

  • 请显示完整的回溯。

标签: django django-rest-framework


【解决方案1】:

尝试使用 ModelSerializer 而不是 Serializer 作为超类。

【讨论】:

  • 我更改了序列化程序并完美运行。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 2018-02-11
  • 2015-03-24
  • 2018-01-14
  • 2018-07-31
相关资源
最近更新 更多