尽管使用信号,Django 并未在用户创建时创建用户配置文件

问题描述

我正在尝试在创建用户自动创建用户配置文件。 我使用 django 信号来执行此操作并将其导入到 apps.py 文件中,但它仍然无法正常工作,请告诉我我做错了什么。谢谢。

models.py

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OnetoOneField(User,on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg',upload_to='profile_pics')

    def __str__(self):
        return f'{self.user.username} Profile'

signals.py

from django.db.models.signal import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile

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

@receiver(post_save,sender=User)
def save_profile(sender,**kwargs):
    instance.profile.save()

apps.py

from django.apps import AppConfig

class UsersConfig(AppConfig):
    name = 'users'

    def ready(self):
        import users.signals

在 shell 中('NewUser2' 是使用注册表创建的,'Destiny' 使用管理员获得了一个配置文件

>>> from django.contrib.auth.models import User
>>> user = User.objects.filter(username='NewUser2').first()
>>> user
<User: NewUser2>
>>> user.profile
Traceback (most recent call last):
django.contrib.auth.models.User.profile.RelatedobjectDoesNotExist: User has no profile.
>>> user.profile.image.url
Traceback (most recent call last):
django.contrib.auth.models.User.profile.RelatedobjectDoesNotExist: User has no profile.
>>> user_created_in_admin = User.objects.filter(username='Destiny').first()
>>> user_created_in_admin.profile.image.url 
'/media/default.jpg'

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)