我已经扩展了
django 1.5用户模型,如下所示,当我将任何行插入数据库时,我遇到了问题.我的models.py文件如下所示.
class MyUserManager(BaseUserManager): def create_user(self,email,password=None): if not email: raise ValueError('Users must have an email address') user = self.model( email=MyUserManager.normalize_email(email),) user.set_password(password) user.save(using=self._db) return user def create_superuser(self,password): user = self.create_user(email,password=password ) user.is_admin = True user.save(using=self._db) return user class MyUser(AbstractBaseUser): email = models.EmailField( verbose_name='Email address',max_length=255,unique=True,db_index=True,) is_active = models.BooleanField(default=True) is_admin = models.BooleanField(default=False) objects = MyUserManager() USERNAME_FIELD = 'email' def get_full_name(self): # The user is identified by their email address return self.email def __unicode__(self): return self.email
我的admin.py如下所示.
class MyUserAdmin(UserAdmin): # The forms to add and change user instances form = UserChangeForm add_form = UserCreationForm # The fields to be used in displaying the User model. # These override the definitions on the base UserAdmin # that reference specific fields on auth.User. list_display = ('email','is_admin') list_filter = ('is_admin',) fieldsets = ( (None,{'fields': ('email','password')}),('Permissions',{'fields': ('is_admin',)}),('Important dates',{'fields': ('last_login',) add_fieldsets = ( (None,{ 'classes': ('wide',),'fields': ('email','password1','password2')} ),) search_fields = ('email',) ordering = ('email',) filter_horizontal = () // Now register the new UserAdmin... admin.site.register(MyUser,MyUserAdmin) // ... and,since we're not using Django's builtin permissions,// unregister the Group model from admin. admin.site.unregister(Group)
我从django教程(https://docs.djangoproject.com/en/dev/topics/auth/customizing/#a-full-example)中按照上面的内容
现在我遇到的问题是每当我修改管理员中的任何内容时,我收到的错误信息如下所示.
(1452,’无法添加或更新子行:外键约束失败(csiop.django_admin_log,CONSTRAINT user_id_refs_id_c8665aa FOREIGN KEY(user_id)REFERENCES auth_user(id))’)
因此,看起来django_admin_log表总是需要对auth_user模型的外键引用.但是因为我创建了一个客户用户模型,当我创建一个超级用户时,用户详细信息只存储在客户MyUser表中,并且在auth_user模型中没有创建任何条目,这似乎导致了该问题.
我该如何解决这个问题?请建议.
谢谢
斯里卡特
解决方法
这看起来非常像(Postgresql)数据库错误 – 而不是Django错误. “auth_user”(仍然)在数据库结构的ForeignKey约束中引用.您的自定义模型(称为“MyUser”)不应存在此类问题.在这种情况下,引用应该类似于“accounts_myuser”或“myappname_myuser”.
我想,你已经更新了现有的代码,包括一个旧的数据库.如果您不需要旧的管理日志,只需删除/删除名为“django_admin_log”的表,然后运行“python manage.py syncdb”(或1.7版本的“python manage.py migrate”)让Django重新创建这张桌子从头开始.
但要小心:如果你有其他表引用“旧的”Django用户模型,你将在其他位置再次遇到同样的问题.