问题描述
我正在尝试在创建用户时自动创建用户配置文件。 我使用 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 (将#修改为@)