我正试图抓住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返回给客户端。
我缺少什么来进行部分更新?
由于
答案 0 :(得分:1)
MyUser.user
应该是User
个实例。你不能这样使用它。
您可能希望MyUser
与username
相关联。在这种情况下,您希望从url中获取的参数将设置为lookup_url_kwarg
,lookup_field
将在相关模型中进行联接:
class MyUserDetailUpdateView(GenericAPIView, UpdateModelMixin):
queryset = MyUser.objects.all()
serializer_class = MyUserPartialUpdateSerializer
lookup_field = 'user__username'
lookup_url_kwarg = 'user'