我正在尝试编写一个在文件上传后发送通知电子邮件的函数。如果我对“发送至”电子邮件地址进行硬编码,我的以下代码将有效。
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
from_email = self.request.user.email
send_mail('New Files have been Uploaded',
'New files have been uploaded.',
from_email,
['<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b6c5d3d8d2c2d9f6d3dbd7dfda98d5d9db" rel="noreferrer noopener nofollow">[email protected]</a>', ],
fail_silently=False)
我需要根据序列化程序中的 editor_email 动态设置“[email protected] ”。下面是序列化器。
class VideoSerializer(serializers.ModelSerializer):
projectName = serializers.SerializerMethodField(allow_null=True)
editor_email = serializers.EmailField(
source='editor.email', required=False)
class Meta:
model = Video
# fields = '__all__'
fields = [
'url',
'handle',
'filename',
'size',
'source',
'uploadId',
'originalPath',
'owner',
'project',
'uploadDate',
'editor',
'projectName',
'editor_email'
]
def get_projectName(self, obj):
return obj.project.projectName
当我在应用前端检查 JSON 响应时,“editor_email”的值正是我所期望的。
我对 Django Rest Framework 比较陌生,这里肯定缺少一些东西。我花了几个小时阅读文档并尝试不同的事情,但似乎没有任何效果。
请问有人可以告诉我如何根据序列化程序设置此电子邮件吗?
最佳答案
从 views.py
中删除邮件发送代码片段,并将其移动到 serilizers
中
# views.py
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
<b><strike>from_email = self.request.user.email
send_mail('New Files have been Uploaded',
'New files have been uploaded.',
from_email,
['<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="582b3d363c2c37183d35393134763b3735" rel="noreferrer noopener nofollow">[email protected]</a>', ],
fail_silently=False)</strike></b>
# serializers.py
class VideoSerializer(serializers.ModelSerializer):
# your code
<b>def send_dynamic_mail(self, video_instance):
from_email = video_instance.owner.email
send_mail('New Files have been Uploaded',
'New files have been uploaded.',
from_email,
[video_instance.editor.email, ],
fail_silently=False)
def create(self, validated_data):
video_instance = super().create(validated_data)
self.send_dynamic_mail(video_instance)
return video_instance</b>
关于python - 如何在 Django Rest Framework 中通过电子邮件发送动态数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59314605/