расширить пользовательскую модель в django - PullRequest
0 голосов
/ 02 мая 2020
# this is models.py

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='avatar/', null=True, blank=True)
password2 = models.CharField(max_length=15)

def __str__(self):
    return self.user.username


# this is serializer.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
    model = Profile
    fields = ('avatar',)

def create(self, validated_data):
    user_data = validated_data.pop('user')
    user = User.objects.create_user(**user_data)

    profile = Profile.objects.create(user=user, **validated_data)
    return profile

# this is view.py
@api_view(['GET', 'POST'])
def User_view(request):
if request.method == "GET":
    user = Profile.objects.all()
    serializer = UserSerializer(user, many=True)
    return Response(serializer.data)
elif request.method == "POST":
    serializer = UserSerializer(data=request.data)
    print(serializer)
    if serializer.is_valid():
        serializer.save()
        return Response({'message': serializer.data}, status=status.HTTP_201_CREATED)
    return Response({'error': serializer.errors}, status=status.HTTP_400_BAD_REQUEST)

Я новичок в Django Я хочу построить модель для регистрации пользователя с его профилем и паролем2 для подтверждения пароля, но я не понял, как расширить модель пользователя и дать правильное сообщение об успехе и ошибка.

1 Ответ

0 голосов
/ 02 мая 2020

Если вы хотите создать пользовательскую модель пользователя, которая будет содержать пользовательские данные, такие как имя пользователя, пароль для аутентификации и некоторые пользовательские поля, такие как профиль (в вашем случае), вам необходимо переопределить Django AbstractUser класс.

AbstractUser класс имеет атрибут objects как UserManager, который содержит create_user метод. Этот метод обрабатывает шифрование пароля.

...