Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 覆盖嵌套DRF序列化程序以便在不';不存在?_Django_Django Rest Framework - Fatal编程技术网

Django 覆盖嵌套DRF序列化程序以便在不';不存在?

Django 覆盖嵌套DRF序列化程序以便在不';不存在?,django,django-rest-framework,Django,Django Rest Framework,我有一个Django Rest框架项目,在整个应用程序中使用嵌套的UserSerializer。一个例子是一个TicketSerializer,其所有者有一个嵌套的UserSerializer 我希望在任何时候序列化用户数据时,它都可以获取或创建用户,而不必作为TicketSerializer create方法的一部分显式执行此操作 我知道可能有很多方法可以做到这一点,所以我试图理解最“正确”的方法。目前,我正在考虑重写UserSerializerinit方法,或者创建一个处理逻辑的自定义验证器

我有一个Django Rest框架项目,在整个应用程序中使用嵌套的UserSerializer。一个例子是一个TicketSerializer,其所有者有一个嵌套的UserSerializer

我希望在任何时候序列化用户数据时,它都可以获取或创建用户,而不必作为TicketSerializer create方法的一部分显式执行此操作

我知道可能有很多方法可以做到这一点,所以我试图理解最“正确”的方法。目前,我正在考虑重写UserSerializerinit方法,或者创建一个处理逻辑的自定义验证器。理想情况下,这将是一个可以实现为可重用的Mixin或验证器的解决方案,可以轻松地传播到多个项目

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('id', 'username', 'email')

class TicketSerializer(serializers.ModelSerializer):

    owner = UserSerializer()

    class Meta:
        model = Ticket

    def create(self, validated_data):
       user = validated_data.pop('user')
       user_obj = User.objects.get_or_create(**user)

       ticket = Ticket.objects.create(**validated_data, user=user_obj)
       return ticket

编写公共API或内部API。这严重耦合了应用程序模块,如果需要,将来很难解耦。为什么不进行两次调用1)创建用户,2)创建票证?这是一个非常大的应用程序。我不关心解耦,我只是在寻找一种方法,以消除每次使用UserSerializer时获取和创建用户的重复逻辑。此信息在DRF手册中。DRF手册描述了我当前的解决方案,如上图所示。