Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django Rest中设置ChoiceField的选项_Django_Django Rest Framework_Serialization - Fatal编程技术网

在Django Rest中设置ChoiceField的选项

在Django Rest中设置ChoiceField的选项,django,django-rest-framework,serialization,Django,Django Rest Framework,Serialization,使用Django 2.0和Rest 3.7.7 我有一个序列化程序类,其中一个字段是ChoiceField,它的选择是调用一个函数的结果,该函数将request.user作为参数 这是我的密码: class PostModelCreateSerializer(serializers.ModelSerializer): group = serializers.ChoiceField(choices='') # What I want to do is this # g

使用Django 2.0和Rest 3.7.7

我有一个序列化程序类,其中一个字段是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'
        ]

谢谢

要获取当前用户,您可以使用
self.context['request'].user
语法。要验证提供的组是否在用户组列表中,您可以创建
validate\u 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

谢谢您的回答,但是函数validate_group()根本没有被调用。您删除了group=serializers.ChoiceField(choices=''),但我尝试了两种方法(使用您删除的行和不使用的行)@CHEMSEDDINEHAROUIT是否将
group
定义为模型字段?我不希望将其作为模型字段,如果我将其作为模型字段,我必须以创建post(PostModelCreateSerializer)@chemsedineHarouit的形式填充组的所有字段。在这种情况下,请尝试使用
Serializer
类而不是
ModelSerializer
ModelSerializer
优先提供与模型字段相对应的字段。
Serializer
类用法示例:@neverwalkanloner,我愿意,但我还有其他字段需要
ModelSerializer
user
,我没有提到这件事,只是因为我不想妨碍这个职位。我感谢你的帮助,先生