将queryset as_manager添加到AbstractUser模型

时间:2019-12-30 00:00:44

标签: django django-rest-framework

我有一个简单的模型User,该模型简单地扩展了AbstractUser类并添加了一些额外的字段。我尝试创建超级用户时尝试添加“对象= UserQuerySet.as_manager(),但给我一个错误“未定义get_by_natural_key()”。似乎它覆盖了常规用户管理器,因此我丢失了我尝试将object字段重命名为其他字段,这样我就不会覆盖默认字段,但仍然是相同的错误。有什么方法可以简单地添加查询集而不创建整个新的manager类,扩展BaseUserManager,添加所有从零开始的默认方法,然后向其中添加我的自定义查询集?我只想保留常规的UserManager并仅添加查询集。

class UserQuerySet(QuerySet):
    def more_ten(self):
        return self.filter(points__gt=10)

class User(AbstractUser):
    points = IntegerField(default=0)
    tester = UserQuerySet.as_manager()
    #objects = UserQuerySet.as_manager()

1 个答案:

答案 0 :(得分:1)

根据docs,您的自定义用户管理器应继承自BaseUserManager

class UserQuerySet(QuerySet):

    def more_ten(self):
        return self.filter(points__gt=10)


from django.contrib.auth.models import UserManager as OldUserManager


class UserManager(OldUserManager):

    def get_queryset(self):
        return UserQuerySet(model=self.model, using=self._db, hints=self._hints)


class User(AbstractUser):

    objects = UserManager()