Django REST框架。更新获得一个空的validated_data

时间:2016-04-12 16:09:32

标签: django django-rest-framework

我在下面制作了序列化器。当我使用POST进行创建或GET获取实例时,那就好了。但是当我使用PATCH方法更新实例时,update方法获得一个空的dict作为validated_data。这是什么原因?如果我使用一种根本错误的方法,请告诉我正确的方法。谢谢!

class UserSerializer(serializers.ModelSerializer):
    # password = serializers.CharField(write_only=True)

    class Meta:
        model = get_user_model()
        fields = ('id', 'email', 'first_name', 'last_name', 'password', )
        read_only_fields = ('is_staff', 'is_superuser', 'is_active', )
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        password = validated_data.pop('password')
        user = self.Meta.model(**validated_data)
        user.set_password(password)
        user.is_active = True
        user.save()
        return user

    def update(self, instance, validated_data):
        print validated_data  # returns {} - empty dict
        return instance

我使用ModelViewSet作为视图:

class UserViewSet(viewsets.ModelViewSet):
    queryset = get_user_model().objects.all()
    serializer_class = UserSerializer

urls.py:

router = routers.DefaultRouter()
router.register(r'accounts', UserViewSet, base_name='User')

urlpatterns = [
    url(r'', include(router.urls)),
]

为了测试,我使用Pycharm REST Client并发送“first_name = Name”作为PATCH / accounts / 1 /的请求参数 上面的序列化程序上的打印显示“{}”。需要的帐户存在,序列化程序接收目标实例。

1 个答案:

答案 0 :(得分:1)

好的,我为你的案子找到了解决方案。我之前没有使用过这个工具,虽然我已经使用PyCharm一年多了。这是一个很棒的工具,但是关于细节的文档并不多。解决方案:

  • 首先,我们需要在请求上以JSONContent-Type: application/json)的形式发送请求,看看here,这里有很好的解释如何去做。
  • 其次,在第三列Request Body上选择选项Text并使用此结构{"first_name": "Name"}设置数据(对我来说这是更难的部分)。

有关详细信息,请查看此屏幕截图,我将在下面附上:

enter image description here