【问题标题】:POST not working Django Rest FrameworkPOST 不工作 Django Rest 框架
【发布时间】:2017-04-16 18:41:52
【问题描述】:

我在谷歌找到消息返回,没有找到。 什么我的代码没有发布正确的值? 我需要帮助以解决正确的问题。 作为使用基于表单的通用视图? 我设计了一个restAPI,我不理解我的代码中的问题,我运行并返回: 我检索消息,流。

views.py:

from snippets.models import Equipamento, Colaborador
from snippets.serializers import EquipamentoSerializer, ColaboradorSerializer
from rest_framework import mixins
from rest_framework import generics

class EquipamentoList(generics.ListCreateAPIView):
    serializer_class = EquipamentoSerializer

    def get_queryset(self):
        queryset = Equipamento.objects.all()
        id = self.request.query_params.get('id', None)
        if id is not None:
            queryset = queryset.filter(id=id)
        return queryset


# class ColaboradorList(generics.CreateAPIView):
#     queryset = Colaborador.objects.all()
#     serializer_class = ColaboradorSerializer

#     def get_queryset(self):
#         queryset = Colaborador.objects.all()
#         id = self.request.query_params.get('id', None)
#         if id is not None:
#             queryset = queryset.filter(pk=pk)
#         return queryset

#     def create(self, request, pk):
#         queryset = Colaborador.objects.all()
#         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)



# class ColaboradorDetail(generics.RetrieveUpdateDestroyAPIView):
#     queryset = Colaborador.objects.all()
#     serializer_class = ColaboradorSerializer

class ColaboradorList(mixins.ListModelMixin,
                  mixins.CreateModelMixin,
                  generics.GenericAPIView):
    queryset = Colaborador.objects.all()
    serializer_class = ColaboradorSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

class ColaboradorDetail(mixins.RetrieveModelMixin,
                    mixins.UpdateModelMixin,
                    mixins.DestroyModelMixin,
                    generics.GenericAPIView):
    queryset = Colaborador.objects.all()
    serializer_class = ColaboradorSerializer

    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)

序列化器.py

from rest_framework import serializers
from rest_framework.validators import UniqueValidator
from snippets.models import Equipamento, Colaborador, Propriedade, MotivoParada, Apontamento

class EquipamentoSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    cod_equip = serializers.IntegerField(validators=[UniqueValidator(queryset=Equipamento.objects.all())])
    desc_equip = serializers.CharField(allow_blank=True, max_length=15, required=False)

    def restore_object(self, attrs, instance=None):
        """
        Create or update a new snippet instance, given a dictionary
        of deserialized field values.

        Note that if we don't define this method, then deserializing
        data will simply return a dictionary of items.
        """
        if instance:
            # Update existing instance
            instance.id = attrs.get('id', instance.id)
            instance.cod_equip = attrs.get('cod_equip', instance.cod_equip)
            instance.des_equip = attrs.get('desc_equip', instance.desc_equip)
            return instance
        # Create new instance
        return Equipamento(**attrs)

class ColaboradorSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    cod_colab = serializers.IntegerField(validators=[UniqueValidator(queryset=Colaborador.objects.all())])
    nome_colab = serializers.CharField(max_length=30)

    def restore_object(self, attrs, instance=None):
        """
        Create or update a new snippet instance, given a dictionary
        of deserialized field values.

        Note that if we don't define this method, then deserializing
        data will simply return a dictionary of items.
        """
        if instance:
            # Update existing instance
            instance.id = attrs.get('id', instance.id)
            instance.cod_colab = attrs.get('cod_colab', instance.cod_colab)
            instance.nome_colab = attrs.get('nome_colab', instance.nome_colab)
            return instance
        # Create new instance
        return Colaborador(**attrs)

class ApontamentoSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    criado = serializers.DateTimeField(read_only=True)
    apont_inicio = serializers.TimeField()
    apont_fim = serializers.TimeField()
    duracao = serializers.TimeField()
    equipamento = serializers.PrimaryKeyRelatedField(queryset=Equipamento.objects.all())
    colaborador = serializers.PrimaryKeyRelatedField(queryset=Colaborador.objects.all())
    propriedade = serializers.PrimaryKeyRelatedField(queryset=Propriedade.objects.all())
    m_parada = serializers.PrimaryKeyRelatedField(queryset=MotivoParada.objects.all())

    def restore_object(self, attrs, instance=None):
        """
        Create or update a new snippet instance, given a dictionary
        of deserialized field values.

        Note that if we don't define this method, then deserializing
        data will simply return a dictionary of items.
        """
        if instance:
            # Update existing instance
            instance.id = attrs.get('id', instance.id)
            instance.criado = attrs.get('criado', instance.criado)
            instance.apont_inicio = attrs.get('apont_inicio', instance.apont_inicio)
            instance.apont_fim = attrs.get('apont_fim', instance.apont_fim)
            instance.duracao = attrs.get('duracao', instance.duracao)
            instance.equipamento = attrs.get('equipamento', instance.equipamento)
            instance.colaborador = attrs.get('colaborador', instance.colaborador)
            instance.propriedade = attrs.get('propriedade', instance.propriedade)
            instance.m_parada = attrs.get('m_parada', instance.m_parada)
            return instance
        # Create new instance
        return Apontamento(**attrs)

class PropriedadeSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    cod_prop = serializers.IntegerField(validators=[UniqueValidator(queryset=Propriedade.objects.all())])
    desc_prop = serializers.CharField(max_length=30)

    def restore_object(self, attrs, instance=None):
        """
        Create or update a new snippet instance, given a dictionary
        of deserialized field values.

        Note that if we don't define this method, then deserializing
        data will simply return a dictionary of items.
        """
        if instance:
            # Update existing instance
            instance.id = attrs.get('id', instance.id)
            instance.cod_prop = attrs.get('cod_prop', instance.cod_prop)
            instance.des_prop = attrs.get('desc_prop', instance.desc_prop)
            return instance
        # Create new instance
        return Propriedade(**attrs)

class MotivoParadaSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    cod_mparada = serializers.IntegerField(validators=[UniqueValidator(queryset=MotivoParada.objects.all())])
    desc_mparada = serializers.CharField(max_length=30)

    def restore_object(self, attrs, instance=None):
        """
        Create or update a new snippet instance, given a dictionary
        of deserialized field values.

        Note that if we don't define this method, then deserializing
        data will simply return a dictionary of items.
        """
        if instance:
            # Update existing instance
            instance.id = attrs.get('id', instance.id)
            instance.cod_mparada = attrs.get('cod_mparada', instance.cod_mparada)
            instance.des_mparada = attrs.get('desc_mparada', instance.desc_mparada)
            return instance
        # Create new instance
        return MotivoParada(**attrs)

urls.py

from django.conf.urls import url
# from snippets.views import EquipamentoList, ColaboradorList, ColaboradorDetail
from snippets import views
from rest_framework.urlpatterns import format_suffix_patterns

urlpatterns = [
#    url(r'^snippets/$', views.snippet_list),
 #   url(r'^snippets/(?P<pk>[0-9]+)/$', views.snippet_detail),
    # url('^equipamento/(?P<id>.+)/$', EquipamentoList.as_view()),
    #url('^colab/(?P<id>.+)/$', ColaboradorList.as_view()),
    url('^colab/$', views.ColaboradorList.as_view()),
    url('^colab_add/(?P<pk>[0-9]+)/$', views.ColaboradorDetail.as_view()),
]

urlpatterns = format_suffix_patterns(urlpatterns)I find message return in google, not find solv problem?

帮助。 什么我的代码没有发布值? 我需要帮助以解决正确问题。

【问题讨论】:

  • 你在错误信息中有你需要的一切......

标签: django django-rest-framework


【解决方案1】:

错误消息非常简单。您的序列化程序使用 restore_object 方法,该方法在 Rest Framework 3 中已弃用。将您的 Django Rest Framework 版本降级到 2.x,或者(推荐)重写您的代码以使其与 Rest Framework 的最新版本兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2016-07-17
    • 1970-01-01
    • 2018-04-04
    • 2017-02-04
    • 2015-03-23
    • 1970-01-01
    相关资源
    最近更新 更多