[英]How I can allow a user to modify only their data in django rest framework?
I have a Location model that only should be modified by the owner 我有一个只能由所有者修改的位置模型
class Location(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=100)
address = models.TextField()
This is the API Location Serializer 这是API位置序列化器
class LocationSerializer(serializers.ModelSerializer):
class Meta:
model = Location
fields = ('user', 'name', 'address',)
The problem is that I want the user be the request user 问题是我希望用户成为请求用户
Actually I overwrite the create method of viewset but I think that is not the best solution 实际上我覆盖了viewset的create方法,但是我认为这不是最好的解决方案
class LocationViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
GenericViewSet):
model = Location
serializer_class = LocationSerializer
def get_queryset(self):
return self.model.objects.filter(user=self.request.user)
def create(self, request, *args, **kwargs):
data = request.DATA.copy()
data.update({'user':unicode(self.request.user.id)})
serializer = self.get_serializer(data=data, files=request.FILES)
if serializer.is_valid():
self.pre_save(serializer.object)
self.object = serializer.save(force_insert=True)
self.post_save(self.object, created=True)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED,
headers=headers)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Thanks for any suggestions 感谢您的任何建议
You want to adapt the example from the tutorial about associating snippets with users . 您想改编教程中有关将片段与用户关联的示例 。 Keep your get_queryset
implementation and then set the user
field to the request user in pre_save
. 保留您的get_queryset
实现,然后将user
字段设置为pre_save
的请求用户。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.