У меня есть пример проекта по ссылке github link . Проблема в том, что logi c в основном обрабатывает данные, а не сериализаторы. Я прочитал это как плохую практику:
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')
Что я сделал не так? Извините, если это звучит нуб вопрос.