我有一个商店模型和商店类型模型
class Store(models.Model):
user = models.ForeignKey(User, on_delete=models.PROTECT)
name = models.CharField(max_length=128, blank=True, default="", verbose_name="name")
class AmazonStore(models.Model):
store = models.ForeignKey(Store, on_delete=models.CASCADE, null=True, verbose_name="Amazon store")
amazon_api_key = models.CharField(max_length=255, blank=True, default="", verbose_name="amazon token")
class AliStore(models.Model):
store = models.ForeignKey(Store, on_delete=models.CASCADE, null=True, verbose_name="Ali store")
ali_api_key = models.CharField(max_length=255, blank=True, default="", verbose_name="ali token")
我有一个视图(GenericViewSet、CreateModelMixin、ListModelMixin)来创建和列出商店,现在我想添加一个更新方法来更新商店(及其相关模型的字段)
我希望能够在一个 update() 方法和一个序列化器中更新商店的名称和商店的 api 密钥。 根据商店类型的不同,request.data 中可能会发送不同的数据。
示例: 1.
AmazonConnectOptions: {
name: 'New store name',
ApiKey: 'new api key'
}
AliConnectOptions: {
name: 'New store name',
ApiKey: 'new api key'
}
我想使用 UpdateModelMixin 并添加 update() 方法:
def update(self, request, *args, **kwargs):
partial = kwargs.pop("partial", False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
return Response(status=200)
但我不知道如何在一个序列化器中更新存储及其密钥。
您可以执行
serializer.save()
来保存更新的数据。
def update(self, request, *args, **kwargs):
partial = kwargs.pop("partial", False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(status=200)
这将用新数据覆盖现有数据。
参考:save()