DRF PUT部分更新返回未找到

时间:2017-09-14 15:01:44

标签: django django-rest-framework

我正试图抓住Django和DRF,但遇到了一些麻烦。我想发一个PUT请求对记录进行部分更新。

我目前有以下部分 -

来自models.py

class MyUser(models.Model):
    # Link to User model instance.
    user = models.OneToOneField(User)
    first_name = models.CharField(max_length=32, null=True, blank=True)
    lastname = models.CharField(max_length=32, null=True, blank=True)
    joindate = models.DateTimeField(null=False, blank=False)

    def __str__(self):
        return self.user.username

来自api / views.py

class MyUserDetailUpdateView(GenericAPIView, UpdateModelMixin):
    queryset = MyUser.objects.all()
    serializer_class = MyUserPartialUpdateSerializer
    lookup_field = 'user'

    def put(self, request, *args, **kwargs):
        return self.partial_update(request, *args, **kwargs)

来自api / serializers.py

class MyUserPartialUpdateSerializer(serializers.ModelSerializer):

    class Meta:
        model = MyUser

来自urls.py

url(r'^api/userupdate/(?P<user>[\w]+)/$', apiviews.MyUserDetailUpdateView.as_view(), name='my_user_detail_view_api')

为了测试,我使用了httpie并尝试 -

http -v PUT http://127.0.0.1:8000/api/userupdate/johndoe/ first_name="Johnny"

服务器端报告“未找到:/ api / userdate / johndoe /”并将HTTP 404返回给客户端。

我缺少什么来进行部分更新?

由于

1 个答案:

答案 0 :(得分:1)

MyUser.user应该是User个实例。你不能这样使用它。

您可能希望MyUserusername相关联。在这种情况下,您希望从url中获取的参数将设置为lookup_url_kwarglookup_field将在相关模型中进行联接:

class MyUserDetailUpdateView(GenericAPIView, UpdateModelMixin):
    queryset = MyUser.objects.all()
    serializer_class = MyUserPartialUpdateSerializer
    lookup_field = 'user__username'
    lookup_url_kwarg = 'user'