有谁知道如何在完成注册表格后为用户创建一个配置文件???(Django)
网址:views.py
class UserRegisterView(generic.CreateView):
form_class = SignUpForm #Imported from forms
template_name = 'registration/register.html'
success_url = reverse_lazy('login')
def form_valid(self, form):
response = super().form_valid(form)
return response
字符串
models.py
class Profile(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
#rpg_class = models.CharField(max_length=100)
def __str__(self):
return str(self.user)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
型
我试过这个,它不起作用,它说的东西像
Internal Server Error: /CodeRPGappMain/register/
Traceback (most recent call last):
File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\sqlite3\base.py", line 328, in execute
return super().execute(query, params)
sqlite3.IntegrityError: NOT NULL constraint failed: CodeRPGappMain_profile.bio
型
在管理中手动创建一个配置文件是行不通的,所以我需要它自动创建自己每次用户注册时,它已经创建了一个Djangos内置的东西,但我需要创建其自定义模型完成后的用户配置文件的用户bc
2条答案
按热度按时间pexxcrt21#
这(可能)不起作用的原因是因为您的
Profile
有一个bio
字段不是**null=True
[Django-doc],并且没有default=…
**[Django-doc],因此在创建Profile
时,它没有值可以填充bio
。字符串
您可能需要手动设置其他字段,或者定义
default=…
值。无论如何,使用信号通常不是一个好主意。例如,当您批量创建或更新项目时,信号不起作用。你可以只使用视图并覆盖admin,* 而不使用 * 信号:
型
在管理层中:
型
hgqdbh6s2#
首先,你不需要在
create()
之后使用save()
方法。create()
方法只需一步即可创建和保存对象。这里的问题是:
sqlite3.IntegrityError: NOT NULL constraint failed: CodeRPGappMain_profile.bio
。看起来你玩了Profile模型,并以某种方式添加了生物字段。怎么修?
如果你不关心你的数据,只需删除
.sqlite3
数据库文件和迁移文件夹中的所有迁移(除了__init__.py
)。然后makemigrations()
和migrate()
,一切都将工作。或者,将
bio field
添加回模型。您可以提供default=''
或null=True
来不关心初始值并避免问题。