Перейдя к
url(r'api/users/', views.MyUserCreate.as_view(), name='user-create'),
, можно увидеть DRF Browsable API
![DRF Create Custom User Browsable API View](https://i.stack.imgur.com/eRqPj.jpg)
, который использует MyUserCreate (в views.py )
class MyUserCreate(APIView):
"""
Creates the user.
"""
def post(self, request, format='json'):
serializer = MyUserSerializer(data=request.data)
if serializer.is_valid():
MyUser.objects.create_user(
serializer.username,
serializer.password
)
if user:
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
Обратите внимание, что он ссылается на MyUserSerializer (в serializers.py)
class MyUserSerializer(serializers.ModelSerializer):
username = serializers.CharField(
required=True,
validators=[UniqueValidator(queryset=MyUser.objects.all())],
min_length=5,
max_length=20
),
password = make_password(serializers.CharField(
write_only=True,
required=True,
max_length=256
))
class Meta:
model = MyUser
fields = ('username', 'password')
def create_user(self, validated_data):
password = make_password(validated_data['password'])
user = MyUser.objects.create_user(validated_data['username'], password)
return user
и MyUser (в models.py)
class MyUserManager(BaseUserManager):
def create_user(self, username, password):
user = self.model(
username=username
)
user.set_password(password)
user.save(using=self._db)
return user
class MyUser(AbstractBaseUser):
objects = MyUserManager()
class Meta:
# managed = False
db_table = 'user_entity'
user_id = models.AutoField(primary_key=True, db_column='userId')
username = models.CharField(db_column='username', unique=True, max_length=20)
password = models.CharField(db_column='userPassword', max_length=256)
USERNAME_FIELD = 'username'
def __str__(self):
return str(self.user_id) + " (%s)" % str(self.username)
Когда я публикую для создания пользователя
{
"username": "tiagoperes",
"password": "test"
}
я получаю
django .db.utils.DataError: (1406, «Данные слишком длинные для столбца« имя пользователя »в строке 1» )
![Django error Data too long for column 'username' at row 1](https://i.stack.imgur.com/i1Xhf.jpg)
Следуя информации от других пользователей, проверял, соответствует ли столбец UTF8
![UTF8 column](https://i.stack.imgur.com/CA9uH.jpg)
и не имеет смысла использовать здесь TextField вместо CharField.