问题描述
我正在尝试在创建用户时向用户添加个人资料图片,但是当我尝试登录时创建用户时,即使我尝试使用超级用户登录Django admin,也会得到User has no profile
。此错误是由signals.py文件中的instance.profile.save()
引起的。
这是我的信号。py:
from django.contrib.auth import get_user_model
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Profile
User = get_user_model()
@receiver(post_save,sender=User)
def create_profile(sender,instance,created,**kwargs):
print('inside signals')
print(created)
if created:
Profile.objects.create(user=instance)
@receiver(post_save,**kwargs):
print('inside profile create')
instance.profile.save()
这是我的个人资料模型:
from django.db import models
from django.conf import settings
# Create your models here.
User = settings.AUTH_USER_MODEL
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"
这是我的注册视图:
User = get_user_model()
def register_view(request):
form = RegisterForm(request.POST or None)
if form.is_valid():
username = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
password = form.cleaned_data.get('password1')
password2 = form.cleaned_data.get('password2')
try:
user = User.objects.create_user(username,email,password)
except:
user = None
if user != None:
# request.user == user
# login(request,user)
return redirect('login')
else:
request.session['register_error'] = 1
return render(request,"recipe/forms.html",{'form': form,'title': 'Join Today'})
编辑:这是apps.py
from django.apps import AppConfig
class AccountsConfig(AppConfig):
name = 'accounts'
def ready(self):
print('inside app')
import accounts.signals
我确实在apps.py ready函数下导入了accounts.signals
,但在accounts.apps.AccountsConfig
下确实有INSTALLED_APPS
。
注释instance.profile.save()
可以使我登录Django admin,在那里我可以看到通过我的注册视图创建了用户,但是没有创建配置文件。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)