我有一个Django应用程序,需要一个额外的字段(一个很多的映射到Book类),我通过扩展AbstractUser来做到这一点。
如果您对Django的用户模型完全满意并且您只想添加一些其他配置文件信息,则可以简单地继承django.contrib.auth.models.AbstractUser并添加您的自定义配置文件字段。此类提供默认用户的完整实现作为抽象模型。
class User(AbstractUser):
entitledBooks = models.ManyToManyField(Book)
我在 settings.py
中添加了模型AUTH_USER_MODEL = 'BookRServer.User'
但是如何创建用户(以编程方式)?
user = User.objects.create_user()不起作用。
答案 0 :(得分:1)
create_user manager方法只接受三个参数:username,email(可选)和password(可选)。
你可以这样做:
bookset=Book.objects.all()
user = User.objects.create_user('testuser',email='1@gmail.com')
user.entitledBooks=bookset
user.save()
答案 1 :(得分:0)
简单的,松散耦合的方式是创建一个包含多对多关系的一对一关系用户配置文件
class UserProfile(models.Model):
user = model.OneToOneField(User)
# your many-to-many field here
# create user
u = User(username="", password="", email="", ...)
u.save()
u.userprofile(your fields..here)
u.userprofile.save()
这在所有django版本中通常都是相同的。基本上django 1.6弃用的是提供模型方法get_profile
和一些相关设置..
除非您真的想根据要求从地面构建User
模型,否则您不必真正使用AUTH_USER_MODEL
..
从用户模型中分离用户配置文件也有助于长远