用户在shell中没有显示结果

时间:2018-01-24 04:50:04

标签: python django shell

当我运行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上运行

1 个答案:

答案 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的模型。