Добавление электронной почты пользователя при отправке электронной почты в Django Rest Framework

У меня есть рабочий сериализатор:

class ReportAnswerSerializer(serializers.ModelSerializer):
    complain_by = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())
    answer = serializers.PrimaryKeyRelatedField(read_only=True)

    class Meta:
        model = ModerateAnswer
        fields = ('answer', 'moderate_reason', 'moderate_comment', 'complain_by')
        extra_kwargs = {'moderate_reason': {'required': True}}

    def create(self, validated_data):
        instance = super(ReportAnswerSerializer, self).create(validated_data)
        send_mail(
            'Dziękujemy za zgłoszenie',
            'Zgłosiłeś odpowiedź: {}. Team Deor zajmie się teraz tą wiadomością'.format(instance.answer),
            'info@deor.pl',
            [mail@mail.com],
            fail_silently=False,
        )
        return instance

Но я не хочу статически отправлять электронную почту. Каждый раз, когда пользователь сообщает ответ, я хочу отправлять ему письмо "Спасибо, что сообщили ответ", но я не знаю, как динамически форматировать [mail@mail.com]. Я использую пользовательскую модель пользователя.

class CustomUser(AbstractUser):
    first_name = models.CharField(max_length=50, null=True)
    last_name = models.CharField(max_length=50, null=True)
    slug = models.SlugField(max_length=30, unique=True, null=True, blank=True, editable=False)
    email = models.EmailField(blank=False, unique=True)
    number_of_points = models.IntegerField(default=0)
    facebook_profile = models.CharField(max_length=128, null=True, blank=True)
    instagram_profile = models.CharField(max_length=128, null=True, blank=True)
    twitter_profile = models.CharField(max_length=128, null=True, blank=True)
    package = models.CharField(max_length=128, null=False, default='L')
    paid_till = models.DateField(null=True, blank=True)
    package_downgraded = models.CharField(max_length=128, null=True, blank=True)
    sex = models.CharField(max_length=128, null=True, blank=True)
    location = models.ForeignKey(City, on_delete=models.CASCADE, null=True, blank=True)
    badges = models.ManyToManyField('users.Badge', blank=True)

У вас есть идеи, как это сделать?

Если вы используете представление, основанное на классе generic, оно передает запрос классу serializer в специальном параметре context. Вы можете использовать его для получения электронной почты пользователя следующим образом:

def create(self, validated_data):
    instance = super(ReportAnswerSerializer, self).create(validated_data)
    send_mail(
        'Dziękujemy za zgłoszenie',
        'Zgłosiłeś odpowiedź: {}. Team Deor zajmie się teraz tą wiadomością'.format(instance.answer),
        'info@deor.pl',
        [self.context['request'].user.email],
        fail_silently=False,
    )
    return instance

Обратите внимание, что если вы не используете общие представления, вы должны передавать контекст сериализатору вручную. В вашем представлении вам нужно инициализировать сериализатор следующим образом:

serializer = ReportAnswerSerializer(data=request.data, context={'request': request})
Вернуться на верх