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

我的 Django 信号在哪里寻找在 createprofile 函数中创建的缺失参数?

如何解决我的 Django 信号在哪里寻找在 createprofile 函数中创建的缺失参数?

我在创建用户后使用 django 信号来创建配置文件,但是我收到这个错误,告诉我创建配置文件函数缺少创建的参数,我什至在没有装饰器的情况下尝试过,但它没有用。我不知道我错过了什么。

这是模型和信号本身。

 class Profile(models.Model):
    user = models.OnetoOneField(
        User,verbose_name="user",related_name="profile",on_delete=models.CASCADE
    )
    full_name = models.CharField(max_length=150,blank=True,null=True)
    date_of_birth = models.DateField(blank=True,null=True)
    bio = models.TextField()
    location = models.CharField(max_length=100,null=True)
    picture = models.ImageField(
        default="media/profile_pics/default.jpg",upload_to="media/profile_pics"
    )
    date_created = models.DateTimeField(default=timezone.Now)
    date_updated = models.DateTimeField(auto_Now=True)

    def __str__(self):
        return f"{self.user.username}'s profile"


@receiver(pre_save,sender=User)
def create_profile(sender,instance,created,**kwargs):
    if created:
        Profile.objects.create(user=instance)


@receiver(pre_save,**kwargs):
    instance.profile.save()

我使用 django allauth 进行身份验证和授权。

这是来自终端的错误

     File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\allauth\account\adapter.py",line 246,in save_user
    user.save()
  File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\django\contrib\auth\base_user.py",line 67,in save
    super().save(*args,**kwargs)
  File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\django\db\models\base.py",line 726,in save
    self.save_base(using=using,force_insert=force_insert,File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\django\db\models\base.py",line 750,in save_base
    pre_save.send(
  File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\django\dispatch\dispatcher.py",line 180,in send
    return [
  File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\django\dispatch\dispatcher.py",line 181,in <listcomp>
    (receiver,receiver(signal=self,sender=sender,**named))
TypeError: create_profile() missing 1 required positional argument: 'created'
[09/Jul/2021 18:54:00] "POST /accounts/signup/ HTTP/1.1" 500 136997

解决方法

post_save 信号就是您在此处寻找的信号。

@receiver(post_save,sender=User)
def create_profile(sender,instance,created,**kwargs):
    if created:
        Profile.objects.create(user=instance)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。