在 Django Rest 框架中发送电子邮件时添加用户的电子邮件



我有一个正在工作的序列化程序:

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)

你知道怎么做吗?

如果使用基于泛型类的视图,它会在特殊的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})

最新更新