当我运行python manage.py
shell并运行以下命令时,我得到了这个结果。令我感到奇怪的是,我在我的网站上创建了2个可以加入群组的用户。
>>> from accounts.models import User
>>> User.objects.all()
<QuerySet []>
帐户/ models.py :
class User(auth.models.User, auth.models.PermissionsMixin):
def __str__(self):
return "@{}".format(self.username)
然而,当我在下面运行这些命令时,我得到了我想要的结果。
>>> from groups.models import GroupMember
>>> GroupMember.objects.all()
<QuerySet [<GroupMember: test2>, <GroupMember: test2>, <GroupMember: test1>
基团/ models.py :
class GroupMember(models.Model):
group = models.ForeignKey(Group, related_name='memberships')
user = models.ForeignKey(User, related_name='user_groups')
def __str__(self):
return self.user.username
class Meta:
unique_together = ('group', 'user')
我有:
from django.contrib.auth import get_user_model
User = get_user_model()
在两个模型中
有人可以向我解释为什么会这样吗?
在python 3.5
django 1.11
上运行
答案 0 :(得分:0)
如果要对User模型进行子类化,首选方法是将AbstractUser子类化并将AUTH_USER_MODEL设置更改为指向新的User模型,如https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#substituting-a-custom-user-model
中所述。由于你是用户而不是AbstractUser的子类,可能发生的事情是Django在你的用户和Django的内置用户之间创建了一对一的映射(即存在两个表)。由于您可能没有更改AUTH_USER_MODEL,因此您创建的用户将被创建为Django的内置用户,而不是您的用户。因此,包含您的用户的表格仍为空。
更新:我应该提一下,如果您对一对一映射很好,并且熟悉多表继承的工作方式(参见https://docs.djangoproject.com/en/1.11/topics/db/models/#multi-table-inheritance),您的方式仍然有效。如果您想从主站点(而不是从管理员)创建用户,您也可以确保创建用户的实例。 (如果你使用django-allauth,你可以收到一个信号。)或者你可以按需创建它们,但只要在想要完整的用户列表时查询Django的模型。