微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在单个请求中使用 django 信号在用户和配置文件表中保存数据?

如何解决如何在单个请求中使用 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 举报,一经查实,本站将立刻删除。