【发布时间】:2018-08-10 11:00:35
【问题描述】:
我有带有food_prefrence 字段的User 模型,用户可以选择多个选项。
在模型中,我使用来自django-multiselectfield 的MultiSelectField 来解决我的问题。在我的用户序列化程序中,我使用的是由 rest-framework 提供的 fields.MultipleChoiceField。
现在我的问题是如何使用表单数据从用户那里获取输入,以及如何在我的视图或序列化程序中处理它,截至目前,当我尝试插入选项时使用邮递员和表单数据 已选中,这在调用 serializer.is_valid() 时给我一个错误
{
"food_preference": [
"\"'Indian', 'Continental'\" is not a valid choice."
]
}
下面是我的代码 sn-p。
#models.py
class User(AbstractUser, BaseClass):
food_preference = MultiSelectField(_('Food Preference'), choices=CONST_Food, blank=True, null=True)
#serializer.py
class UserSerializer(serializers.HyperlinkedModelSerializer):
food_preference = fields.MultipleChoiceField(choices=CONST_Food, required=False)
def update(self, instance, validated_data):
instance.food_preference = validated_data.get('food_preference', instance.food_preference)
instance.save()
return instance, "Updated Successfully"
#views.py
def update(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.serializer_class(data=request.data, context={"request": self.request})
print(serializer.initial_data)
if serializer.is_valid(raise_exception=True): ##<<<<<Execution stops here
print("is valid")
result = serializer.update(instance=instance, validated_data=request.data)
if result[0] is None:
return _error_response(400, EPHISH, result[1], {})
data = self.serializer_class(result[0], context={"request": self.request}).data
return _response(data, status.HTTP_201_CREATED)
else:
return _einval_serializer_response(status.HTTP_400_BAD_REQUEST, self.serializer_class)
【问题讨论】:
标签: django django-rest-framework multichoiceitems