我试过类似的方法,但不管用。
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
def save(self):
user = self.context['request.user']
title = self.validated_data['title']
article = self.validated_data['article']
我需要一种能够访问请求的方法。用户从我的Serializer类。
你可以通过请求。用户在视图中调用.save(…)时:
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = models.Event
exclude = ['user']
class EventView(APIView):
def post(self, request):
es = EventSerializer(data=request.data)
if es.is_valid():
es.save(user=self.request.user)
return Response(status=status.HTTP_201_CREATED)
return Response(data=es.errors, status=status.HTTP_400_BAD_REQUEST)
这是模型:
class Event(models.Model):
user = models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
date = models.DateTimeField(default=timezone.now)
place = models.CharField(max_length=255)
解决方案可以很简单,但我尝试使用self. contentt ['request']访问。用户,但没有在序列化器中工作。
如果你使用DRF显然登录通过令牌是唯一的来源或其他可能是有争议的。
朝着解决方案前进。
传递请求。创建serializer.create时的用户实例
views.py
if serializer.is_valid():
watch = serializer.create(serializer.data, request.user)
serializer.py
def create(self, validated_data, usr):
return Watch.objects.create(user=usr, movie=movie_obj, action=validated_data['action'])