在Django Rest中设置ChoiceField的选择

时间:2018-06-30 12:06:21

标签: django django-rest-framework serializer

将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 :(得分:1)

要获取当前用户,可以使用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