如何实现drf框架中字段自动填充为当前登录用户信息的功能?

2026-04-30 20:442阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计202个文字,预计阅读时间需要1分钟。

如何实现drf框架中字段自动填充为当前登录用户信息的功能?

仅填充如您期望的‘仅写的’字段,需要使用serializers.HiddenField。这意味着DRF会在写入时自动填充字段,而不会在读取时返回User class ProjectSerializer(serializers.ModelSerializer): owner=serializers.HiddenField(...)

只填充如果您希望它是“只写的”,需要用serializers.HiddenField,这意味着DRF会在写入时自动填充字段,而不会在读取时返回User

class ProjectSerializer(serializers.ModelSerializer):
owner = serializers.HiddenField(default=serializers.CurrentUserDefault())

class Meta:
model = Project
fields = ['id', 'name', 'code', 'owner']
depth = 1


如何实现drf框架中字段自动填充为当前登录用户信息的功能?

希望可读可写就需要用serializers.PrimaryKeyRelatedField

class ProjectSerializer(serializers.ModelSerializer):
owner = serializers.PrimaryKeyRelatedField(read_only=True)

class Meta:
model = Project
fields = ['id', 'name', 'code', 'owner']
depth = 1

class ProjectViewSet(viewsets.ModelViewSet):
serializer_class = ProjectSerializer
permission_classes = [permissions.IsAuthenticated]

def get_queryset(self):
user = self.request.user
return user.project_set.all()

# 预处理user相关
def perform_create(self, serializer):
serializer.save(owner=self.request.user)

本文共计202个文字,预计阅读时间需要1分钟。

如何实现drf框架中字段自动填充为当前登录用户信息的功能?

仅填充如您期望的‘仅写的’字段,需要使用serializers.HiddenField。这意味着DRF会在写入时自动填充字段,而不会在读取时返回User class ProjectSerializer(serializers.ModelSerializer): owner=serializers.HiddenField(...)

只填充如果您希望它是“只写的”,需要用serializers.HiddenField,这意味着DRF会在写入时自动填充字段,而不会在读取时返回User

class ProjectSerializer(serializers.ModelSerializer):
owner = serializers.HiddenField(default=serializers.CurrentUserDefault())

class Meta:
model = Project
fields = ['id', 'name', 'code', 'owner']
depth = 1


如何实现drf框架中字段自动填充为当前登录用户信息的功能?

希望可读可写就需要用serializers.PrimaryKeyRelatedField

class ProjectSerializer(serializers.ModelSerializer):
owner = serializers.PrimaryKeyRelatedField(read_only=True)

class Meta:
model = Project
fields = ['id', 'name', 'code', 'owner']
depth = 1

class ProjectViewSet(viewsets.ModelViewSet):
serializer_class = ProjectSerializer
permission_classes = [permissions.IsAuthenticated]

def get_queryset(self):
user = self.request.user
return user.project_set.all()

# 预处理user相关
def perform_create(self, serializer):
serializer.save(owner=self.request.user)