代码之家  ›  专栏  ›  技术社区  ›  atline

在进行http put时,如何使用django rest框架只更新部分db记录参数?

  •  0
  • atline  · 技术社区  · 6 年前

    我在使用时遇到一个问题 django rest framework 想得到你的帮助。

    对于下面的代码,可以使用 http GET/POST ,但如果我使用以下命令更新 field para1 :

    curl -X PUT -H 'Content-Type: application/json' -i 'http://127.0.0.1:8000/info/my_key_1/' --data '{"para1": "hi"}'

    它告诉我:

    {

    “para2”:[“此字段是必需的。”],

    “para3”:[“此字段是必需的。”],

    }

    我知道,我可以补充 para2 &安培; para3 打电话时 PUT 方法,但这不是我需要的。 我想知道我是否可以更新 para1 不添加 para2 and para3 因为我不想改变他们? 同时,如果我能得到所有的文件 GET ,仍然检查所有字段 POST ,我的意思是不要从序列化程序中丢弃para2¶3。有什么解决办法吗?

    顺便说一下,我用 viewsets.ModelViewSet .

    接下来是主要代码:

    网址.py

    router = SimpleRouter()
    router.register(r'info', views.InfoView)
    

    序列化程序.py

    class InfoSerializer(serializers.ModelSerializer):
        class Meta:
            model = Info
            fields = (
                'id',
                'key',
                'para1',
                'para2',
                'para3'
            )
    

    模型.py

    class Info(models.Model):
        key = models.CharField(max_length=30, unique=True)
        para1 = models.CharField(max_length=30)
        para2 = models.CharField(max_length=30)
        para3 = models.CharField(max_length=30)
    

    视图.py

    class InfoView(viewsets.ModelViewSet):
        lookup_field = 'key'
        queryset = Info.objects.all()
        serializer_class = InfoSerializer
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   neverwalkaloner    6 年前

    你需要使用 PATCH 部分更新的方法:

    curl -X PATCH -H 'Content-Type: application/json' -i 'http://127.0.0.1:8000/info/my_key_1/' --data '{"para1": "hi"}'