Django - пользователи непоследовательно зарегистрированы в Admin - PullRequest
0 голосов
/ 23 января 2019

Это модель пользователя по умолчанию, ничего индивидуального, никаких изменений в Auth.Я использую Django 2.1.

Depot / Admin.py

import depot.models as models
from django.contrib import admin
from django.db.models.base import ModelBase
from django.contrib.auth.models import User

admin.site.site_header = "DSG IT Database"
for model_name in dir(models):
    model = getattr(models, model_name)
    if isinstance(model, ModelBase):
        if model in admin.site._registry: 
            admin.site.unregister(model)
        else:
            admin.site.register(model)

Stores / Admin.py

import stores.models as models
from django.contrib import admin
from django.db.models.base import ModelBase
from django.contrib.auth.models import User

admin.site.site_header = "DSG IT Database"
for model_name in dir(models):
    model = getattr(models, model_name)
    if isinstance(model, ModelBase):
        if model in admin.site._registry: 
            admin.site.unregister(model)
        else:
            admin.site.register(model)

Я понимаю, что это своего рода избыточно, но это не проблема, потому что это было проблемой, когда это был проект с одним приложением.

enter image description here

Происходит то, что Users просто отсутствует на сайте администратора.Я могу зарегистрировать его снова с помощью admin.site.register(User), но потом в будущем (на первый взгляд случайным образом) я получу ошибку, что User уже зарегистрирован.Затем я unregister модель, и она будет работать некоторое время, затем в какой-то момент Пользователи просто снова исчезнут, и единственный способ заставить его работать снова - это зарегистрировать его снова.

Я не могунайти, где мне нужно быть, чтобы отладить это.Я предполагаю, что где-то модель регистрируется, но только при определенных условиях, в которых я не уверен.У кого-нибудь была проблема, подобная этой?

Пожалуйста, не стесняйтесь просить меня включить любую информацию, которая, по вашему мнению, поможет диагностировать!

1 Ответ

0 голосов
/ 23 января 2019

Если stores.models импортирует User, оно будет указано в dir(models), а поскольку ModelBase является метаклассом Django для всех моделей Django:

isinstance(User, ModelBase)   # Is True

Итак, модель User отсутствует, потому что вы ее отменяете.

Вы можете использовать:

from django.apps import apps

stores_app_config = apps.get_app_config('stores')

for model in stores_app_config.get_models():
    # process models from stores app here.

Предлагаемое чтение: Метаклассы Python.

...