django - 如何使用 django restful api 发布/修补用户模型
问题描述
我有一家 django oscar 商店,并使用处理字段扩展了我的用户模型:
class User(AbstractUser):
treatment = models.CharField(max_length=128)
现在我想扩展 django oscar api 以发布或修补用户(我想更改“治疗”)。
如果我去http://localhost:8000/api/users/并尝试发布一个新的,我会得到这个错误:
TypeError at /api/users/
int() argument must be a string, a bytes-like object or a number, not 'DeferredAttribute'
有谁知道如何处理这个问题?
视图.py:
class UserList(basic.UserList):
queryset = User.objects.all()
serializer_class = CreateUserSerializer
def post(self, request, format=None):
v_ser = self.serializer_class( data=request.data, context={'request': request})
if v_ser.is_valid():
ser = self.serializer_class( User, context={'request': request})
return Response(ser.data)
return Response(v_ser.errors, status=status.HTTP_406_NOT_ACCEPTABLE)
序列化程序.py:
class CreateUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'email', 'treatment')
email = serializers.EmailField()
treatment = serializers.CharField(max_length=128, required=True)
def validate(self, attrs):
#oscar expects this always to be uppercase.
attrs['treatment'] = attrs['treatment'].upper()
request = self.context.get('request')
return attrs
def create(self, validated_data):
return User.objects.create(**validated_data)
解决方案
推荐阅读
- r - 在 R 中使用 cv.glmnet 对象创建模型矩阵以预测新数据
- python - Python将+1添加到dict中包含的列表项
- vim - .vimrc 自动命令如果不是文件类型
- javascript - 防止聊天消息从 MySQL 服务器发送后在浏览器中执行脚本?
- java - 从运行时加载的 java 9 模块加载类时发生 ClassNotFoundException
- firebase - Admob 横幅错位
- javascript - 除非页面刷新,否则带有 gatsby js 的 FaunaDB 客户端 graphql 不会重新呈现
- javascript - 如何在数据表中进行精确查询搜索?
- javascript - Firebase 实时数据库文档排序
- javascript - 如何仅更新 Mongodb 中现有对象的某些键?