gpt4 book ai didi

django - 无法创建 super 用户 Django

转载 作者:行者123 更新时间:2023-12-03 14:42:27 25 4
gpt4 key购买 nike

我假设这是因为我的 super 用户依赖于尚无现有数据的 UserProfile。
我的模型看起来像

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

class UserProfile(models.Model):
user = models.OneToOneField(User) # required
location = models.CharField(max_length=100)
age = models.PositiveIntegerField(blank=True,null=True)
contribution_points = models.PositiveIntegerField()
#acheivements = models.ManyToMany()

def create_user_profile(sender,instance,created,**kwargs):
if created:
UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)

但是,我最终遇到以下错误:
django.db.utils.DatabaseError: (1146, "Table 'savory_db.login_userprofile' doesn't exist")

尽管刚刚跑了 syncdb
我的模型是否有任何会导致此错误的矛盾字段。 UserProfile 不应该应用于 super 用户吗?我应该如何防止这种情况?

最佳答案

我刚刚遇到了同样的问题 - 通过迁移创建的配置文件模型,以及在使用初始 syncdb 创建 super 用户时中断的信号处理程序.

我的解决方案如下。

首先,处理表还不存在的情况。这有点难看,也许过于激烈(可能会掩盖其他错误)

@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
try:
WheelProfile.objects.get_or_create(user=instance)
except DatabaseError:
logging.error("Failed to create profile for %s, perhaps migrations haven't run yet?" % instance)
from django.db import connection
connection._rollback()

其次,在迁移完成时运行一个处理程序:
from south.signals import post_migrate

@receiver(post_migrate)
def create_profiles(app, **kwargs):
if app == "wheelcms_axle":
for u in User.objects.all():
WheelProfile.objects.get_or_create(user=u)

当然,这也将在进行 future 迁移时运行,为没有配置文件的用户创建配置文件。对我来说,这不是问题。

关于django - 无法创建 super 用户 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14059573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com