为什么我无法将Django REST Framework PrimaryKeyRelatedField修补到空列表?

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

我在Django REST Framework中遇到了一个奇怪的问题。我正在尝试使用PATCH请求向用户添加组或从用户中删除组。

我能够修补/api/users/:id/以更新最初为空的groups列表。例如,以下操作会产生以下结果:

  1. [PATCH /api/users/:id/ {"groups": [1]}->使用groups: [1]]的用户结果>
  2. [PATCH /api/users/:id/ {"groups": [1, 2]}->使用groups: [1,2]]的用户结果>
  3. [PATCH /api/users/:id/ {"groups": [1]}->导致用户返回groups: [1]
  4. 因此,我正在成功通过PATCH请求更新状态。但是以下内容无法相应更新:

    [PATCH /api/users/:id/ {"groups": []}->结果用户仍然在groups: [1]

这是我的UserSerializer类:

class UserSerializer(serializers.ModelSerializer):
    groups = serializers.PrimaryKeyRelatedField(many=True,
                                                queryset=Group.objects.all(),
                                                allow_empty=True, required=False)

    class Meta:
        model = User
        fields = (
            'id',
            'username', 'first_name', 'last_name', 'is_staff', 'is_authenticated', 'is_superuser', 'email',
            'groups'
        )

我怀疑它与PrimaryKeyRelatedField有关-我尝试了许多构造方法的参数组合都无济于事。

我在Django REST Framework中遇到了一个奇怪的问题。我正在尝试使用PATCH请求向用户添加组或从用户中删除组。我能够修补到/ api / users /:id /以更新组列表,...

python django django-rest-framework
1个回答
0
投票

我有同样的问题:问题是,当您传递一个空列表时,PATCH方法会像识别“没有字段”那样识别它。既然如此,没有领域的策略就是保持它不变。您可以将HTTP方法更改为UPDATE,然后将整个对象再次提供给服务器以解决该问题,但当然不是解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.