Django 如何将数据插入CreateAPIVIew';s的反应

Django 如何将数据插入CreateAPIVIew';s的反应,django,django-rest-framework,Django,Django Rest Framework,我目前有以下代码,在创建一个对象时,返回该项的序列化 class Item(Model): name = models.CharField(max_length=20, null=False) uid = models.CharField(max_length=40, null=False, default=uuid1) puid = models.CharField(max_length=40, null=True) class ServerCreateView(C

我目前有以下代码,在创建一个对象时,返回该项的序列化

class Item(Model):
    name = models.CharField(max_length=20, null=False)
    uid = models.CharField(max_length=40, null=False, default=uuid1)
    puid = models.CharField(max_length=40, null=True)


class ServerCreateView(CreateAPIView):

    def perform_create(self, serializer):

        # Create
        instance = serializer.save()

        # Updates its previous uid
        puid = self.model_class.objects\
            .values_list('uid', flat=True)\
            .filter(pk__lt=instance.pk)\
            .order_by('-pk')[:1][0]

        self.model_class.objects
            .filter(pk=instance.pk)\
            .update(puid=puid, sdtc=datetime.now())

我需要能够返回它的puid,但它不会计算,直到模型保存后。我知道我可以选择去
instance=serializer.save(puid={puid})
,这将在响应中包括它的puid,但是这为在检索puid和保存项目本身之间保存另一个项目留下了竞争条件的空间,我还需要防止这种情况。有没有办法做到这一点而不使我的数据面临风险?

首先,编写一个序列化程序类,重写此数据上的create函数

class MySerializer(serializers.ModelSerializer):
    class Meta:
        model= mymodel
        fields=(add your desire fields)
    def create(self, validated_data):
        #do some process
        mymodel_obj=mymodel.objects.create()
        return mymodel_obj