如何使用相关模型的字段更新实例

问题描述 投票:0回答:1

我有一个商店模型和商店类型模型

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)

但我不知道如何在一个序列化器中更新存储及其密钥。

django django-models django-rest-framework django-views django-serializer
1个回答
0
投票

您可以执行

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()

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.