python - django api 支持使用 Many=True 更新序列化器,仅创建

标签 python django api django-rest-framework insert-update

我在序列化器中使用了许多来创建新字段。我需要实现更新,以便添加新字段并保留现有字段不变。下面给出了我的代码。

模型.py

class Device(models.Model):
   device_id = models.CharField(max_length=200)
   auth_token = models.CharField(max_length=100)


class ThirdPartyApps(models.Model):
   auth_token = models.ForeignKey(Device, on_delete=models.CASCADE)
   app_name = models.CharField(max_length=100)

序列化器.py

class AppSerializer(serializers.ModelSerializer):

    class Meta:
        model = Apps
        fields = ('app_name', 'auth_token_id')

    def create(self, validated_data):
        if "auth_token_id" in self.context:
            id1 = self.context["auth_token_id"]
            instance = self.Meta.model(**validated_data)
            user_id = id1
            if user_id is not None:
                instance.auth_token_id = user_id
                instance.save()
            return instance

View .py

@api_view(['POST'])
def add_apps(request):
    data = request.data
    auth_token = request.META.get('HTTP_AUTHTOKEN', '')
    auth_tok = Device.objects.get(auth_token=auth_token)
    a_id = auth_tok.id
    serializer = AppSerializer(ThirdPartyApps, data=data, context={"auth_token_id": a_id}, many=True)
    if serializer.is_valid():
        serializer.save()
        content = collections.OrderedDict(
                [('status', True), ('message', "Third party apps are saved")])
        return Response(content, status=status.HTTP_200_OK)
    else:
        return Response(serializer.errors)

我尝试通过提供模型名称来使用 django 的更新支持,同时将其传递给序列化器以调用更新方法。但它说当 Many=True 时,不支持 update ,只支持 create 方法。建议在我的序列化器中使用 ListSerializer 类并覆盖 `.update() 。我无法理解如何使用它。我只想更新我的字段。

最佳答案

序列化器实例化的参数应该是一个实例,而不是一个模型

serializer = AppSerializer(ThirdPartyApps, data=data, context={"auth_token_id": a_id}, many=True)

您需要将 ThirdPartyApps 替换为您要更新的实例列表。

您还需要遵循 documentation关于如何处理多次更新。

关于python - django api 支持使用 Many=True 更新序列化器,仅创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46575333/

相关文章:

python - ModuleNotFoundError - 尝试启动服务时没有名为 'main' 的模块

javascript - 如何关闭弹出窗口并将网址重定向到父页面?

django - 在 Django-Admin 中按字母顺序排列显示项目

ios - Alamofire HTTP 请求失败

android - 使用 android api 创建新的同步日历

python - 带有喜欢和日期的 Pandas 查询功能

python: 使用 'MySQLdb' 模块连接到远程 mysql 服务器

python - Django 中的内页表单

node.js - 根据数组的大小进行多个 api 调用

javascript - Python-spidermonkey : How to get a line num. 错误