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