Open creamidea opened 10 years ago
本来以为大功告成,但是突然发现一个问题: 当自己创建用户的时候居然发现出错了,出错内容:
CommandError: One or more models did not validate:
mushroom.mushroomuser: Model has been swapped out for 'account.MushroomUser' whi
ch has not been installed or is abstract.
auth.user: Model has been swapped out for 'account.MushroomUser' which has not b
een installed or is abstract.
admin.logentry: 'user' has a relation with model account.MushroomUser, which has
either not been installed or is abstract.
页面一直说auth_user( "no such table: auth_user"),找不到,后来我听从网上的一个教程说的,改变了表的名称:
db_table = 'auth_user'
也就是这个样子:
class MushroomUser(AbstractUser):
...
class Meta:
db_table = 'auth_user'
swappable = 'AUTH_USER_MODEL'
...
Reference:
If you really want to use a model reference to the User, you can wirte it like this:
class UserProfile(models.Model):
# you add this line in you code
user = models.OneToOneField(User)
university = models.ForeignKey('University')
course_title = models.ForeignKey('Course_Title')
class Meta:
db_table = 'user_profile'
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
Reference: UserCreationForm in Django with extra fields when a foreign key exists
花了一段时间研究Django的用户模型User,一直想写出自己的用户模型,因为想加入自己的一些字段,比如:手机号码。但是之前一直没有尝试成功,今天终于成功了,于是将其整理如下:
首先,我使用的是Django 1.5.4,而这个版本「改经」了User,于是乎就不用像之前那么麻烦了。之前(根据搜索到的资料),开发者是不能扩展User字段的,只能添加一个类似于profile的模型和User关联,进行想过的操作。
在Django 1.5.4 中,可以使用以下方式解决:
in model.py
其实就是模仿contrib.auth.models中的User写的。根据我目前的理解,如果你要新建一个自己的用户模型,需要先创建一个自己的用户管理模型,而这个自己的用户模型可以继承BaseUserManager,然后实现两个方法,一个是创建用户的方法create_user和创建超级用户的方法create_superuser。
接下来就是创建自己的用户模型,将objects的值指定为你设置的用户管理模型即可。在自己定义的模型中就可以定义自己的字段了。嗯,差不多就是这个样子了。
对了,还要注意,在Django1.5.4中,还需要在settings.py中设置一个属性值,
这样子差不多就大功告成了。
Reference: