Python Django 1.11带有组的自定义用户模型

Python Django 1.11带有组的自定义用户模型,python,django,Python,Django,我试图在我的用户(AbstractBaseUser)模型和内置组模型之间添加一个ForeignKey。我现在的问题是我无法创建超级用户,因为它需要用“something”填充group字段 我通过shell创建了一个名为admin的组,id为1。但是,我找不到创建超级用户的方法,并在创建时将组设置为admin 以下是my/accounts应用程序中的models.py: from django.db import models from django.forms import ModelForm

我试图在我的用户(AbstractBaseUser)模型和内置组模型之间添加一个ForeignKey。我现在的问题是我无法创建超级用户,因为它需要用“something”填充group字段

我通过shell创建了一个名为admin的组,id为1。但是,我找不到创建超级用户的方法,并在创建时将组设置为admin

以下是my/accounts应用程序中的models.py

from django.db import models
from django.forms import ModelForm
from django.contrib.auth.models import (
        BaseUserManager,
        AbstractBaseUser,
        Group
    )

class UserManager(BaseUserManager):
    def create_user(self, email, group, password=None):
        if not email:
            raise ValueError('Users must have an email address')

        user = self.model(
            email = UserManager.normalize_email(email),
            password = password,
            group = group
        )
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, email, group, password):
        user = self.create_user(
            email = UserManager.normalize_email(email),
            group = group
        )

        user.is_admin = True
        user.is_staff = True
        user.is_superuser = True
        user.save()
        return user


class User(AbstractBaseUser):
    objects = UserManager()
    date_added = models.DateField(auto_now=False, auto_now_add=True)
    email = models.EmailField(unique=True, db_index=True)

    group = models.ForeignKey(Group)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['group']

    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    def __str__(self):
        return self.email

    def get_full_name(self):
        return self.email

    def get_short_name(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_perms(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    def is_staff(self):
        return self.is_admin
每当我运行migrate.py createsuperuser时,它都会询问电子邮件、密码和组(组ID)。 如果我键入
admin
,则会出现以下错误:

ValueError: invalid literal for int() with base 10: 'admin'
如果我键入1(id),则会出现以下错误:

ValueError: Cannot assign "'1'": "User.group" must be a "Group" instance.
你可以改变

group = group

在您的创建超级用户定义中

然后,您可以只使用超级用户向导所期望的组id(在您的情况下为1)

如果您最终将使用多个实例,我将考虑在迁移中而不是通过shell创建该组(因此,当您设置新实例并运行迁移时,该组将自动出现)

遇到同样的问题

实际上,
group
PermissionsMixin
的属性,所以您需要做的是实现
PermissionsMixin
AbstractBaseUser

class User(AbstractBaseUser, PermissionsMixin):

我还尝试将
group=group
更改为
group=group.objects.get(id=group)
,但这会产生以下错误:
TypeError:int()参数必须是字符串、类似对象的字节或数字,而不是“group”
您确定只在def create\u superuser中更改了它吗?查看您在原始帖子的评论中给出的错误,看起来您在create_user和create_superuser上都对其进行了更改。实际上我复制了你的代码,只是改变了那一行,它在这里工作。我做了,是的。还是不走运。我只是从头开始重新检查,它对我有效。如果您仍然有这个问题,那么这是什么python/django版本(也许您也可以在其中共享回购协议?)。
class User(AbstractBaseUser, PermissionsMixin):