我有User
带有food_prefrence
字段的模型,用户可以选择多个选项。
在模型中,我使用MultiSelectField
from django-multiselectfield来解决我的问题。在我的用户序列化程序中,我使用的是由 rest-framework 提供的 fields.MultipleChoiceField。
现在我的问题是如何使用表单数据从用户那里获取输入以及如何在我的视图或序列化程序中处理它,截至目前,当我尝试使用邮递员插入选择并选择表单数据时,这给了我一个错误何时serializer.is_valid()
调用
{
"food_preference": [
"\"'Indian', 'Continental'\" is not a valid choice."
]
}
下面是我的代码片段。
#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)