首页 > 解决方案 > 如何使用 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)

标签: djangorestapi

解决方案


推荐阅读