2016-01-20 16 views
2

我一直在试图将所有用户数据发送给他/她提供的电子邮件每当管理员创建通过Django的admin.I用户详细估计post_save信号应该用于这样的过程。但是我的post_save信号不能在控制台上调用,也不能在管理员创建完成后发送所有的用户信息。我做错了什么?发送用户的细节他的电子邮件时Django管理创建用户

Models.py

from __future__ import unicode_literals 
from django.contrib.auth.models import User 
from django.db.models.signals import post_save 
from django.core.mail import EmailMessage 
from django.dispatch import receiver 
from django.db import models 

@receiver(post_save,sender=User) 
def send_user_data_when_created_by_admin(sender, **kwargs): 
    import inspect 
    records = [] 
    for record in inspect.stack(): 
     print('record',record) 
     records.append(record[3]) 
    if record[3]=='get_response': 
     request = record[0].f_locals['request'] 
     first_name = request.POST.get('first_name') 
     print('first name is',first_name) 
     last_name = request.POST.get('last_name') 
     address = request.POST.get('address') 
     email = request.POST.get('email') 
     html_content = "your first name:%s <br> last name:%s <br> address:%s" 
     from_email = settings.DEFAULT_FROM_EMAIL 
     message=EmailMessage('welcome',html_content %(first_name,last_name,address),from_email,[email]) 
     message.content_subtype='html' 
     message.send() 

class userbase(models.Model): 
    first_name = models.CharField(max_length=100,blank=True,null=True,help_text=("enter the first name of user")) 
    last_name = models.CharField(max_length=100,blank=True,null=True,help_text=("enter the last name")) 
    address = models.CharField(max_length=300,blank=True,null=True,help_text=("enter the address")) 
    contact = models.CharField(max_length=100,blank=True,null=True,help_text=("enter the contact")) 
    email = models.EmailField(max_length=100,blank=True,null=True,help_text=("enter the email")) 
    username = models.CharField(max_length=100,blank=True,null=True,help_text=("enter the username")) 
    password = models.CharField(max_length=100,blank=True,null=True,help_text=("enter the strong password")) 

    def __str__(self): 
    return (self.username) 
+0

您应该在设置文件中将'EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend''更改为'EMAIL_BACKEND ='django.core.mail.backends.console.EmailBackend''以查看发送的电子邮件如果信号全部被调用 – phourxx

+0

我没有得到控制台中的名字,因为我已经打印它看看是否它的工作与否。我的代码中可能有什么错误? – milan

回答

2

你应该改变你的函数这个

@receiver(post_save,sender=UserProfile) 
def send_user_data_when_created_by_admin(sender, instance, **kwargs): 

     first_name = instance.user.first_name 
     print('first name is',first_name) 
     last_name = instance.user.last_name 
     address = instance.address 
     email = instance.user.email 
     html_content = "your first name:%s <br> last name:%s <br> address:%s" 
     message=EmailMessage(subject='welcome',body=html_content %(first_name,last_name,address),to=[email]) 
     message.content_subtype='html' 
     message.send() 

你的模型应该是这个

class UserProfile(models.Model): 
    address = models.CharField(max_length=300,blank=True,null=True,help_text=("enter the address")) 
    contact = models.CharField(max_length=100,blank=True,null=True,help_text=("enter the contact")) 
    user = models.ForeignKey(User) 

    def __str__(self): 
    return (self.username) 

所以每当你要保存新对象,你用这个

user = User.objects.create_user(username=username, email=email, password=password, first_name=first_name, last_name=last_name) 
UserProfile.objects.create(user=user, contact=contact, address=address) 
user.save() 

其中,用户名,电子邮件,密码,名字,姓氏,联系人和地址是您创建的表单中各自字段值的cleared_data。

你可以设计你的管理员被迫创建一个用户配置,同时通过在admin.py使用这些线创建用户

from django.contrib import admin 
from django.contrib.auth import get_user_model 
from django.contrib.auth.admin import UserAdmin 
from account.models import UserProfile 


class UserProfileInline(admin.StackedInline): 
    model = UserProfile 
    can_delete = False 


class UserProfileAdmin(UserAdmin): 
    inlines = (UserProfileInline,) 


admin.site.unregister(get_user_model()) 
admin.site.register(get_user_model(), UserProfileAdmin) 

如果万一你遇到任何错误请让我知道

+0

我了解您的代码的每一部分,除了user = User.objects ....是否与从管理面板创建用户相同?因为我想要一个管理员创建一个具有名字,姓氏等细节的用户。 – milan

+0

是,它同样 – phourxx

+0

哎它为我工作,但不是instance.user.first_name我做instance.first_name和我得到想要的result.I将标志着你的答案解决。 – milan

相关问题