无法通过帐户实例访问Manager

时间:2018-09-26 21:41:17

标签: django django-admin django-authentication django-organizations

在使用django-organizations进行项目组织时,我制作了一个单独的帐户应用程序。

在我认为是基本情况的情况下,使用文档(https://django-organizations.readthedocs.io/en/latest/cookbook.html#advanced-customization-using-abstract-models)中的代码,我试图将它们添加到

admin.py页面:

from accounts import models as AccountModels

@admin.register(AccountModels.Account)
class AccountAdmin(admin.ModelAdmin):
    list_display = ['slug', 'active', ]

当尝试在帐户的管理页面上查看列表时(在http://localhost:8000/adminaccounts/account/时会出现错误[ps-add页面呈现,但保存时会提供相同的错误):

  在/ adminaccounts / account /

处的

AttributeError      

无法通过帐户实例访问管理器

看着错误,我不应该在实例上调用它,而应该在一个类上调用它。但是默认的管理模板正在呈现此页面,所以我对此进行编辑时要小心。我在管理类中设置继承类是否缺少什么? (组织用户和组织所有者都正确显示,这增加了我的困惑)

这是表明它正在尝试访问实例的堆栈(但我无法在堆栈跟踪中找到产生错误的行,只是它位于错误的{{content}}部分中)模板块):

/Users/me/.virtualenvs/myFirst/lib/python3.6/site-packages/django/contrib/admin/utils.py in lookup_field
            attr = getattr(obj, name) ...
▼ Local vars
Variable      Value
model_admin   <accounts.admin.AccountAdmin object at 0x11e0185f8>
name          'active'
obj           <Account: Funny Clowns With Paper Boats>
opts          <Options for Account>

/Users/me/.virtualenvs/myFirst/lib/python3.6/site-packages/django/db/models/manager.py in __get__
            raise AttributeError("Manager isn't accessible via %s instances" % cls.__name__) ...
▼ Local vars
Variable      Value
cls           <class 'accounts.models.Account'>
instance      <Account: Funny Clowns With Paper Boats>
self          <django.db.models.manager.ManagerDescriptor object at 0x11dabb978>

帐户models.py(与文档相同):

from django.db import models
from organizations.abstract import (AbstractOrganization,
                                    AbstractOrganizationUser,
                                    AbstractOrganizationOwner)

class Account(AbstractOrganization):
    monthly_subscription = models.IntegerField(default=1000)

class AccountUser(AbstractOrganizationUser):
    user_type = models.CharField(max_length=1, default='')

class AccountOwner(AbstractOrganizationOwner):
    pass

accounts应用程序中没有任何功能视图或基于类的视图,所以我不知道是否应该覆盖管理器或搜索查询或视图...

尝试覆盖管理员的视图(?):

@admin.register(Account)
class AccountAdmin(BaseOrganizationAdmin):
    def get_queryset(self, request):
        qs = super(AccountAdmin, self).get_queryset(request)
        print(Account)         # <class 'accounts.models.Account'>
        print(type(Account))   # <class 'organizations.base.OrgMeta'>
        print(type(qs))        # <class 'django.db.models.query.QuerySet'>
        return qs # or Account

这会产生上一个错误,或者是type object 'Account' has no attribute 'filter'

1 个答案:

答案 0 :(得分:1)

在您的代码中,您拥有:

list_display = ['slug', 'active', ]

但是active指的是ActiveManager实例。您需要is_active,它指向模型字段。