如何解决无法为 Django 中的新注册用户创建配置文件
我正在开发一个新的 Django 项目,目的是让学生注册并在注册后为每个学生创建一个个人资料。用户注册时出现错误。
错误
ValueError at /students/register/
无法在模型保存中同时强制插入和更新。
以下是我的代码片段:
models.py
-ResultPageSize
views.py
from django.db import models
from django.contrib.auth.models import User
from PIL import Image
class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
image = models.ImageField(default='default.png',upload_to='students/profile_pics')
bio = models.TextField(null=True,blank=True,verbose_name='biography')
def __str__(self):
return f'{self.user.username} Profile'
def save(self,*args,**kwargs):
super().save(*args,*kwargs)
img = Image.open(self.image.path)
if img.height > 300 or img.width > 300:
output_size = (300,300)
img.thumbnail(output_size)
img.save(self.image.path)
forms.py
def register_student(request):
if request.method == 'POST':
form = StudentRegistrationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request,f'Account created for {username}!')
return redirect('student_course_list')
else:
form = StudentRegistrationForm()
return render(request,'students/student/registration.html',{'form': form})
urls.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class StudentRegistrationForm(UserCreationForm):
email = forms.EmailField(help_text='Enter a valid email address')
class Meta:
model = User
fields = ['username','email','password1','password2']
signals.py
from .views import register_student
urlpatterns = [
###
path('register/',register_student,name='student_registration'),]
apps.py
from django.db.models.signals 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()
settings.py
from django.apps import AppConfig
class StudentsConfig(AppConfig):
name = 'students'
def ready(self):
import students.signals
我已经尝试了所有方法,但没有任何效果。在管理员端,用户已注册,但没有为他们创建个人资料。
我正在等待您的高贵回应和更好的解决方案 谢谢。
解决方法
不需要第二个信号。它给出错误,因为下面的信号正在更新数据库中尚未创建的对象。
@receiver(post_save,sender=User)
def save_profile(sender,instance,**kwargs):
instance.profile.save()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。