问题描述
我有一个包含字段(名字、姓氏、用户名、电子邮件、出生日期、电话号码)的注册表。
我已使用信号在用户配置文件中创建记录。每当有新的用户数据添加到用户表时
我想要的是每当用户发布请求时。数据应该保存在用户表中,然后信号在配置文件表中创建一个记录,然后剩余的数据也应该填充到相关字段中。因为我在注册时收到了用户的所有数据。
views.py
def register(request):
if request.method == "POST":
print(request.POST)
first_name = request.POST.get('first-name') <-----user table
last_name = request.POST.get('last-name') <-----user table
username = request.POST.get('username') <-----user table
email = request.POST.get('email') <-----user table
gender = request.POST.get('gender') <-----profile table
date_of_birth = request.POST.get('date-of-birth') <-----profile table
address = request.POST.get('address') <-----profile table
phone_number = request.POST.get('mob-number') <-----profile table
ans_1 = request.POST.get('ans-1') <-----profile table
ans_2 = request.POST.get('ans-2') <-----profile table
User.objects.create_user(first_name=first_name,last_name=last_name,email=email,username=username,last_login=timezone.Now())
return render(request,'authentication/register.html')
signals.py
@receiver(post_save,sender=User)
def create_user_info(sender,instance,created,**kwargs):
if created:
Userinformation.objects.create(user=instance)
@receiver(post_save,sender=User)
def save_user_info(sender,**kwargs):
instance.userinfo.save()
apps.py
class YourappConfig(AppConfig):
...
def ready(self):
import yourapp.signals
解决方法
我不知道这是否是一个好的解决方案。但这对我有用。
views.py
def register_user(request):
if request.method == "POST":
new_user = User(first_name = request.POST.get('first-name'),last_name = request.POST.get('last-name'),username = request.POST.get('email-mobile'),last_login=timezone.now()
# password = request.POST.get('password')
)
new_user.set_password(request.POST.get('password'))
new_user.gender = request.POST.get('gender')
new_user.date_of_birth = request.POST.get('dob')
new_user.address = request.POST.get('address')
new_user.ans_1 = request.POST.get('ans-1')
new_user.ans_2 = request.POST.get('ans-2')
new_user.save()
return redirect('auth-login')
return render(request,'authentication/register.html')
signals.py
@receiver(post_save,sender=User)
def create_user_info(sender,instance,created,**kwargs):
if created:
attrs_needed= ['gender','date_of_birth','address','ans_1','ans_2']
UserInformation.objects.create(user=instance,gender=instance.gender,date_of_birth = instance.date_of_birth,address=instance.address,ans_1=instance.ans_1,ans_2=instance.ans_2)
post_save.connect(create_user_info,sender=User,weak=False)
apps.py
class YourappConfig(AppConfig):
...
def ready(self):
import yourapp.signals
所以,我在这里所做的是首先获取所有请求数据并将其绑定到 User
对象。然后在 signals.py
中,我获取了实例(通过 post_save 信号传递),然后在创建 Userinfo 新对象时,我还将字段数据传递给它。
我本可以发表评论,但无法为您的问题添加评论。
我重现了您的错误,但我通过添加 app.py
函数并在 ready()
类中添加 import yourapp.signals
来更新 AppConfig(AppConfig)
我能够更新 Profile 模型
class YourappConfig(AppConfig):
...
def ready(self):
import yourapp.signals