Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 将模型对象从viewset传递到函数中_Django_Email_Serialization - Fatal编程技术网

Django 将模型对象从viewset传递到函数中

Django 将模型对象从viewset传递到函数中,django,email,serialization,Django,Email,Serialization,我有一个Django视图集,其中有一个函数,每当使用该视图集时,它都会发送一封电子邮件 我重写了create函数,发送电子邮件,我有一个函数,可以将电子邮件发送给用户 我想将一些参数传递给函数,以便在使用Django的模板引擎完成的电子邮件中显示 class ContactRequestViewSet(viewsets.ModelViewSet): queryset = ContactRequest.objects.all() permission_classes = [ permiss

我有一个Django视图集,其中有一个函数,每当使用该视图集时,它都会发送一封电子邮件

我重写了create函数,发送电子邮件,我有一个函数,可以将电子邮件发送给用户

我想将一些参数传递给函数,以便在使用Django的模板引擎完成的电子邮件中显示

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对应的实例属性即可