我试图在DRF中创建一个对象(称为Post),其中一个字段为user
,该字段应代表创建该对象的用户。我正在使用令牌认证,并且我想确保request.user与传递给该对象的用户匹配。但是,我使用的是HyperLinkedModelSerializers,所以我将用户的URL传递给PostSerializer。
如何获取request.user的网址?我必须在用户中创建一个url字段吗?
这是序列化程序类:
class UserSerializer(serializers.HyperlinkedModelSerializer):
User = get_user_model()
password = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('username', 'password')
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
return user
class PostSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Post
fields = ('id', 'user', 'caption', 'video_link')
def create(self, validated_data):
return Post(**validated_data)
这是视图集
class PostViewSet(viewsets.ModelViewSet):
serializer_class = PostSerializer
queryset = Post.objects.all()
permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
答案 0 :(得分:1)
如果用户登录系统,则可以按照以下方式重写PostSerializer:
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('caption', 'video_link')
def create(self, validated_data):
post = Post(user=self.request.user, caption=validated_data['caption'], video_link=validated_data['video_link'])
post.save()
return validated_data