Получить автоматически сгенерированное поле из модели в сериализаторе, не возвращая его - PullRequest
0 голосов
/ 03 мая 2019

У меня есть сериализатор, который используется для приглашения нового пользователя.В пользовательской модели, которую использовал этот сериализатор, есть автоматически сгенерированное поле для ключа активации (которое отправляется пользователю по электронной почте).Каков наилучший способ получить ключ активации в сериализаторе без добавления объекта User, который будет возвращен в ответе?По понятным причинам я не хочу, чтобы ключ активации возвращался во внешний интерфейс.

models.py:

class User(AbstractBaseUser):
    ...
    activation_key = models.UUIDField(unique=True, default=uuid.uuid4)  
    ...

serializers.py:

class UserInvitationSerializer(serializers.ModelSerializer):
    email = serializers.EmailField()

    class Meta:
        model = User
        fields = ('id', 'email', 'first_name', 'last_name')

    def create(self, validated_data):

        user = User.objects.create(**validated_data)
        random_pass = User.objects.make_random_password(length=10)
        user.set_password(random_pass)
        user.save()

        activation_key = ?
        send_mail('Email Address Verification Request', 'confirm/email/(?P<activation_key>.*)/$', 'info@mydomain',[user.email])

        return user

1 Ответ

2 голосов
/ 03 мая 2019

activation_key генерируется автоматически.

В create() у вас уже есть созданный экземпляр User, поэтому вы можете получить ключ активации из этого объекта:

class UserInvitationSerializer(serializers.ModelSerializer):
    email = serializers.EmailField()

    class Meta:
        model = User
        fields = ('id', 'email', 'first_name', 'last_name')

    def create(self, validated_data):

        user = User.objects.create(**validated_data)
        random_pass = User.objects.make_random_password(length=10)
        user.set_password(random_pass)
        user.save()

        activation_key = user.activation_key
        send_mail('Email Address Verification Request', 'confirm/email/(?P<activation_key>.*)/$', 'info@mydomain',[user.email])

        return user

Учитываячто вы явно указали в fields что должен возвращать ModelSerializer, activation_key не будет отображаться в ответе API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...