установить выбор ChoiceField в Django Rest - PullRequest
0 голосов
/ 30 июня 2018

с использованием Django 2.0 с Rest 3.7.7.

У меня есть класс Serializer , где поле представляет собой ChoiceField , и его выбор является результатом вызова функции, которая принимает request.user в качестве аргумента .

Вот мой код:

class PostModelCreateSerializer(serializers.ModelSerializer):
    group    = serializers.ChoiceField(choices='')
    # What I want to do is this
    # group    = serializers.ChoiceField(choices= request.user.get_groups())
    # get_groups() returns a queryset of groupModel
    class Meta:
        model = MYMODEL
        fields=[
        'id',
        'group',
        'content'
        ]

Спасибо

1 Ответ

0 голосов
/ 30 июня 2018

Для получения текущего пользователя вы можете использовать синтаксис self.context['request'].user. Чтобы проверить, есть ли указанная группа в списке групп пользователей, вы можете создать метод validate_group:

class PostModelCreateSerializer(serializers.ModelSerializer):

    class Meta:
        model = MYMODEL
        fields=[
        'id',
        'group',
        'content'
        ]

    def validate_group(self, value):
        user = self.context['request'].user
        user_groups = user.get_groups()
        if value not in user_groups:
            raise serializers.ValidationError("Invalid group")
        return value
...