Пользовательская модель:
class User(AbstractUser):
ROLE_CHOICES = (
('R', 'rider'),
('D', 'driver'),
)
role = models.CharField(max_length=1, choices=ROLE_CHOICES)
phone_number = models.CharField(max_length=10)
cab = models.OneToOneField('Cab', on_delete=models.CASCADE, blank=True, null=True)
Rider сериализатор:
class RiderSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'phone_number', 'password')
extra_kwargs = {
'password': {'write_only': True}
}
def create(self, validated_data):
username = validated_data.pop('username')
password = validated_data.pop('password')
instance = User(username, **validated_data)
if password is not None:
instance.set_password(password)
instance.save()
return instance
Метод представления на основе функции Райдера:
@api_view(['GET', 'POST'])
def rider_list(request):
if request.method == 'GET':
riders = User.objects.filter(role='R')
serializer = RiderSerializer(riders, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = RiderSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
serializer.save(role='R')
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
конечная точка райдера: / райдеры /
Я могу создать объект пользователя, но аутентификация пользователя не удалась, поскольку пароль сохраняется в виде простого текста в объекте.
Я пытался использовать User.objects.create_user (имя пользователя, пароль = пароль, ** validated_data), чтобы установить пароль в качестве хешированного значения, но он не работает
Я также пытался использовать метод make_password для установки хешированного пароля, но, похоже, ничего не работает.
Пожалуйста, скажите мне, что мне не хватает. Как сохранить хешированный пароль в поле пароля пользовательского объекта.