django - 如何在 CreateAPIVIew 的响应中插入数据
问题描述
我目前有以下代码,它在创建对象时返回项目的序列化。
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
推荐阅读
- c - GMP 为中间计算创建的对象是否保留在内存中?
- asp.net-mvc - ASP.NET Core MVC 项目 ViewComponent 错误:“找不到 Invoke 或 InvokeAsync ...”
- unicode - \uD83D\uDCCC 不断出现在我继承的代码中。这个 unicode 序列有什么作用?
- azure - 带有队列输出绑定的 Azure Http 函数
- vhdl - 行为和综合后模拟不匹配
- java - Cosmos db 使用 Java SDK 部分更新 SQL api
- azure-data-factory - 如何从 ADF 验证 Twitter 端点
- python - Django:为什么我的对象没有正确添加数据库?
- django - 如何使 Django Crispy Forms Inline Radios 水平显示?
- ansible - Ansible VMWare 收集 ESX 主机列表