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

时间:2019-01-23 20:41:37

标签: python django django-models django-2.1

这是默认的用户模型,没有任何自定义,也没有以任何方式对Auth进行修改。我正在使用Django 2.1。

软件仓库/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)

商店/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 :(得分:1)

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