我正在尝试编写一个在文件上传后发送通知电子邮件的功能。如果我对“发送至”电子邮件地址进行了硬编码,则我下面的代码有效。
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,
['[email protected]', ],
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)
from_email = self.request.user.email
send_mail('New Files have been Uploaded',
'New files have been uploaded.',
from_email,
['[email protected]', ],
fail_silently=False)
# serializers.py
class VideoSerializer(serializers.ModelSerializer):
# your code
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
我认为您可以在函数中获取字段editor_email
数据。如果仅字符串数据,则可以这样:
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
to_email = serializer.data['editor_email']
if to_email:
from_email = self.request.user.email
send_mail('New Files have been Uploaded',
'New files have been uploaded.',
from_email,
[to_email, ],
fail_silently=False)