【问题标题】:Add user's email when sending email in Django Rest Framework在 Django Rest Framework 中发送电子邮件时添加用户的电子邮件
【发布时间】:2022-02-04 23:20:21
【问题描述】:

我有这个工作的序列化程序:

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)

你知道怎么做吗?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    如果您使用基于通用类的视图,它会将请求传递给特殊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})
    

    【讨论】:

    • 我认为super(ReportAnswerSerializer, self)应该换成super()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2019-12-15
    • 2011-10-18
    • 1970-01-01
    • 2021-05-06
    • 2012-04-26
    相关资源
    最近更新 更多