Django 将模型对象从viewset传递到函数中
我有一个Django视图集,其中有一个函数,每当使用该视图集时,它都会发送一封电子邮件 我重写了create函数,发送电子邮件,我有一个函数,可以将电子邮件发送给用户 我想将一些参数传递给函数,以便在使用Django的模板引擎完成的电子邮件中显示Django 将模型对象从viewset传递到函数中,django,email,serialization,Django,Email,Serialization,我有一个Django视图集,其中有一个函数,每当使用该视图集时,它都会发送一封电子邮件 我重写了create函数,发送电子邮件,我有一个函数,可以将电子邮件发送给用户 我想将一些参数传递给函数,以便在使用Django的模板引擎完成的电子邮件中显示 class ContactRequestViewSet(viewsets.ModelViewSet): queryset = ContactRequest.objects.all() permission_classes = [ permiss
class ContactRequestViewSet(viewsets.ModelViewSet):
queryset = ContactRequest.objects.all()
permission_classes = [
permissions.AllowAny
]
serializer_class = ContactRequestSerializer
def create(self, request, *args, **kwargs):
response = super(ContactRequestViewSet, self).create(request, *args, **kwargs)
send_email()
return response
#function to send email
def send_email():
htmly = get_template('email.html')
d = {'company_name': 'dodo'} #i want this dictionary, to contain the attributes from the viewset
send_mail(
subject='Test email',
message='',
from_email='test@email.com',
recipient_list=['test@email.com'],
html_message= htmly.render(d)
)
现在我只有一个示例占位符d,但这里我想传入用户提供的序列化程序/模型的属性,我尝试传入序列化程序并访问其属性,但我不知道如何以正确的方式执行此操作
response=superContactRequestViewSet,self.createrequest,*args,**kwargs
它将保存序列化程序的数据。然而,如果您想要一个模型的实际实例,这是不够的,您需要稍微修改一下。django rest framework的ModelViewSet中使用的CreateModelMixin具有以下方法:
类CreateModelMixin:
... 这里有更多的东西
def createself,request,*args,**kwargs:
serializer=self.get\u serializerdata=request.data
serializer.is_validraise_exception=True
self.perform\u createserializer
headers=self.get\u success\u headersserializer.data
return Responseserializer.data,status=status.HTTP_201_CREATED,headers=headers
def perform_createself,序列化程序:
序列化程序.save
因此,您可以重写perform_create方法,将实例保存到ContactRequestViewSet的属性中,如下所示:
def perform_createself,序列化程序:
self.instance=serializer.save
然后在create方法中,您可以执行如下操作:
def createself,request,*args,**kwargs:
response=superContactRequestViewSet,self.createrequest,*args,**kwargs此调用在内部执行\u create
发送电子邮件self.instance
返回响应
视图集的属性到底是什么意思?您希望将哪些属性传递给send_email方法?属于模型的属性,因此,如果模型有一个属性名称class='Kris',我会想要该属性,例如,您的意思是您希望访问新创建的实例,对吗?是的,正是我的意思!我不确定,如果它是序列化器模型的属性,或者是实际的视图集,我正在寻找是否有一种方法,可以使用外键从数据库中的实表访问数据?当然有。只需访问与FK对应的实例属性即可