如何在 Django 中使用多个对象序列化方法字段?
How to seralize a MethodField with more than one object in Django?
我想序列化一个方法来检查故事的作者是否是当前登录的用户,如果是 returns true,如果不是 false。然而,Django 的 Docs 声明 Serliazer 方法除了 self 之外只需要一个参数。那么除了故事(对象)之外,我如何访问用户模型?
我在想类似的事情:
class StorySerializer(serializers.ModelSerializer):
story_owner_permission = serializers.SerializerMethodField('check_story_owner_permission')
class Meta:
model = Story
fields = ['story_owner_permission']
def check_story_owner_permission(self, story, request):
story_author = story.author.id
current_user = request.user.id
if (story_author == current_user):
return True
else:
return False
但是没用。 check_story_owner_permission() missing 1 required positional argument: 'request'
您可以在序列化程序中使用 context
,默认情况下,如果您从视图调用序列化程序,视图会自动填充它 (see get_serializer_context
):
class StorySerializer(serializers.ModelSerializer):
story_owner_permission = serializers.SerializerMethodField('check_story_owner_permission')
class Meta:
model = Story
fields = ['story_owner_permission']
def check_story_owner_permission(self, obj):
return obj.author.id == self.context["request"].user.id
我想序列化一个方法来检查故事的作者是否是当前登录的用户,如果是 returns true,如果不是 false。然而,Django 的 Docs 声明 Serliazer 方法除了 self 之外只需要一个参数。那么除了故事(对象)之外,我如何访问用户模型?
我在想类似的事情:
class StorySerializer(serializers.ModelSerializer):
story_owner_permission = serializers.SerializerMethodField('check_story_owner_permission')
class Meta:
model = Story
fields = ['story_owner_permission']
def check_story_owner_permission(self, story, request):
story_author = story.author.id
current_user = request.user.id
if (story_author == current_user):
return True
else:
return False
但是没用。 check_story_owner_permission() missing 1 required positional argument: 'request'
您可以在序列化程序中使用 context
,默认情况下,如果您从视图调用序列化程序,视图会自动填充它 (see get_serializer_context
):
class StorySerializer(serializers.ModelSerializer):
story_owner_permission = serializers.SerializerMethodField('check_story_owner_permission')
class Meta:
model = Story
fields = ['story_owner_permission']
def check_story_owner_permission(self, obj):
return obj.author.id == self.context["request"].user.id