如何解决如何在单个请求中使用 django 信号在用户和配置文件表中保存数据?
我有一个包含字段(名字、姓氏、用户名、电子邮件、出生日期、电话号码)的注册表。
我已使用信号在用户配置文件中创建记录。每当有新的用户数据添加到用户表时
我想要的是每当用户发布请求时。数据应该保存在用户表中,然后信号在配置文件表中创建一个记录,然后剩余的数据也应该填充到相关字段中。因为我在注册时收到了用户的所有数据。
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。