我有User
模型与food_prefrence
字段,用户可以选择多个选项。
在模型中,我使用来自django-multiselectfield的MultiSelectField
来解决我的问题。在我的User序列化器中,我使用rest-framework提供的fields.MultipleChoiceField。
现在我的问题是如何使用form-data从用户那里获取输入,以及如何在我的视图或序列化程序中处理它,到目前为止,当我试图插入选择using postman with form-dataselected时,当调用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)
型
这里也是我的 Postman x1c 0d1x的截图
3条答案
按热度按时间6rvt4ljy1#
我也遇到了同样的问题。在DRF中,我将字段改为:
food_preference = fields.CharField(required=False)
然后我就可以走了。
7uzetpgm2#
如果你有类似于
字符串
然后你必须发送1,2,3。
型
我们的想法是传递价值观。
更新
哦,我终于找到了!您正在使用django-multiselectfield(请将其添加到标签中,这样如果有人遇到同样的问题,他会更快地找到解决方案)我复制了您的配置,首先,
型
你的元组必须看起来像
型
问题出在序列化器中,它需要字符串列表,但您发送的是它无法解析的整数和/或值列表本身。
型
bfrts1fy3#
字符串
列表项