在django ModelViewSet中编写精简视图

在django ModelViewSet中编写精简视图,django,django-models,django-rest-framework,Django,Django Models,Django Rest Framework,我有一个样本项目如下。问题在于逻辑处理主要在视图上,而不是序列化程序上。我认为这是一种不好的做法: class OrgAddAPI(viewsets.ModelViewSet): queryset = Organization.objects.root_nodes() serializer_class = OrganizationSerializer def create(self, request): alldata = request.POST

我有一个样本项目如下。问题在于逻辑处理主要在视图上,而不是序列化程序上。我认为这是一种不好的做法:

class OrgAddAPI(viewsets.ModelViewSet):
    queryset = Organization.objects.root_nodes()
    serializer_class = OrganizationSerializer

    def create(self, request):
        alldata = request.POST
        # desc = alldata.get("desc", "0")
        # name = alldata.get("name", "0")
        desc = request.data.get("desc")
        name = request.data.get("name")
        code = request.data.get("code")
        subpath = request.data.get("subpath")
        try:
            parent = Organization.objects.root_nodes().get()
        except Exception as e:
            print(e.__class__.__name__)
            if e.__class__.__name__ == "DoesNotExist":
                parent = Organization.objects.create(name="BOSS", desc="boss",code="BOSS",subpath="ftech")
            else:
                response_dict = {"c" : ErrorCode.ORG_GENERIC_ERROR,  "m": str(e),
                                 "e" : ErrorCode(ErrorCode.ORG_GENERIC_ERROR.name)}
                return Response(response_dict)

        try:
            Organization.objects.create(name=name, desc=desc, code = code, subpath =subpath, parent=parent)
        except Exception as e:
            response_dict = {"c" : ErrorCode.ORG_GENERIC_ERROR, "m": str(e),
                             "e" : ErrorCode.ORG_GENERIC_ERROR.name}
            return Response(response_dict)

        response_dict = {"result": "true"}
        # update response_dict with whatever you want to send in response
        return Response(response_dict)
我试图重构为序列化程序,但它没有跳转到新函数:

class OrganizationSerializer(serializers.ModelSerializer):
    children = RecursiveField(many=True)
    def validate(self,data):
        """ //// not jump
        check that root node must be available
        :param data:
        :return:
        """
        serialized = jsonpickle.encode(data)
        print(yaml.dump(yaml.load(serialized), indent=2))

    def create(self, validated_data):
        name = validated_data.get("name", None) // not jump
        serialized = jsonpickle.encode(validated_data)
        print(yaml.dump(yaml.load(serialized), indent=2))
    class Meta:
        model = Organization
        fields = ('id', 'name', 'code' , 'subpath' , 'desc', 'parent_id', 'level', 'children')
我做错了什么?对不起,如果这听起来是个愚蠢的问题

问题是逻辑处理主要在视图上

我会说一切。问题是您没有在视图中使用序列化程序。您可以看到create方法的“默认”实现。它使用
get\u serializer
,它最终使用的是
serializer\u class
class属性。遵循这种方法,它会跳到你想要的地方