Django - 用户不一致地注册到管理员

Django - Users inconsistently registered to Admin

这是默认的用户模型,没有任何定制,也没有以任何方式对 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)

我知道这些有点多余,但这不是问题,因为当这也是一个应用程序项目时,这也是一个问题。

发生的事情是 Users 完全从管理站点中消失了。我可以用 admin.site.register(User) 再次注册它,但稍后(看似随机)我会收到一条错误消息,提示 User 已注册。然后我 unregister 模型,它会工作一段时间,然后在某个时候用户会再次消失,让它再次工作的唯一方法是再次注册。

我找不到调试它的位置。我假设模型正在某个地方注册,但只是在我不确定的某些条件下。有人遇到过类似的问题吗?

请随时让我提供您认为有助于诊断的任何信息!

如果 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 metaclasses.