在Django Rest中设置ChoiceField的选项
使用Django 2.0和Rest 3.7.7 我有一个序列化程序类,其中一个字段是ChoiceField,它的选择是调用一个函数的结果,该函数将request.user作为参数 这是我的密码:在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
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
,我没有提到这件事,只是因为我不想妨碍这个职位。我感谢你的帮助,先生