У меня есть магазин django oscar, и я добавил в свою модель пользователя поле обработки:
class User(AbstractUser):
treatment = models.CharField(max_length=128)
Теперь я хочу расширить API django oscar для публикации или исправления пользователя (я хочу изменить"treatment").
Если я захожу на http://localhost:8000/api/users/ и пытаюсь опубликовать новое, я просто получаю эту ошибку:
TypeError at /api/users/
int() argument must be a string, a bytes-like object or a number, not 'DeferredAttribute'
Кто-нибудь знает, каксправиться с этим?
views.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)
serializers.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)