Менеджер не доступен через учетные записи - PullRequest
0 голосов
/ 27 сентября 2018

Используя django-организации для организации проектов, я создал отдельное приложение для учетных записей.

Использование кода из документов (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 /

Менеджер isn 'Он доступен через экземпляры учетной записи

Глядя на ошибку, я не должен вызывать ее в экземпляре, а только в классе.Но шаблон администратора по умолчанию отображает эту страницу, поэтому я с осторожностью ее редактирую.Есть ли что-то, чего мне не хватает в связи с настройкой наследуемого класса в классе администратора?(пользователь организации и владелец организации правильно отображают, добавляя к моей путанице)

Это стек, который показывает, что он пытается получить доступ к экземпляру (но я не могу найти в трассировке стека, какая строкавыдает ошибку, только то, что она находится в {{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 голосов
/ 27 сентября 2018

В вашем коде у вас есть:

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

Но active относится к экземпляру ActiveManager.Вы хотите is_active, что относится к полю модели.

...