django 信号不起作用的原因=用户注册时创建配置文件

ruarlubt  于 2023-01-27  发布在  Go
关注(0)|答案(1)|浏览(124)

信号不起作用的原因=用户注册时创建配置文件
我想知道真相

  • ----设置
INSTALLED_APPS = [
    'main',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
  • ----型号
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save

# Create your models here.
class profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    music = models.CharField(max_length=50)
    skils = models.CharField(max_length=50)
    search = models.CharField(max_length=50)
    posts = models.CharField(max_length=50)
    boi = models.TextField()
    img = models.ImageField(upload_to="profile-img")

    def __str__(self):
        return self.user

    def create_profile(sender, **kwargs):
        if kwargs['created']:
            user_profile = profile.objects.create(user=kwargs['instance'])

post_save.connect(create_profile, sender=User)

为什么代码不工作
为什么代码不工作

insrf1ej

insrf1ej1#

您在profile类中定义了create_profile,因此post_save无法访问它。

class profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    music = models.CharField(max_length=50)
    skils = models.CharField(max_length=50)
    search = models.CharField(max_length=50)
    posts = models.CharField(max_length=50)
    boi = models.TextField()
    img = models.ImageField(upload_to="profile-img")

    def __str__(self):
        return self.user

def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = profile.objects.create(user=kwargs['instance'])

post_save.connect(create_profile, sender=User)

仅供参考,signal不是执行have a look to django-antipattern article about signals操作的最合适方式。如果我是你,我会使用自定义用户模型并覆盖其保存方法。

相关问题