我有一个只应由所有者修改的位置模型
class Location(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=100)
address = models.TextField()
这是API位置序列化程序
class LocationSerializer(serializers.ModelSerializer):
class Meta:
model = Location
fields = ('user', 'name', 'address',)
问题是我希望用户成为请求用户
实际上我覆盖了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)
感谢您的任何建议
答案 0 :(得分:0)
您想要调整example from the tutorial about associating snippets with users。保留get_queryset
实施,然后将user
字段设置为pre_save
中的请求用户。