Как разделить MethodField с более чем одним объектом в Django? - PullRequest
0 голосов
/ 16 июня 2020

Я хочу сериализовать метод, который проверяет, является ли автор истории текущим вошедшим в систему пользователем, если да, то возвращает true, если не false. Однако в Docs of Django указано, что для метода 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'

1 Ответ

1 голос
/ 16 июня 2020

Вы можете использовать context в сериализаторе, по умолчанию, если вы вызываете свой сериализатор из представления, представление заполняет его автоматически ( см. 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
...