django过滤查询集会导致“ AppRegistryNotReady:模型尚未加载”。与models.py中的表格

托比

在我们当前的django-project(django 1.7.1)的开发过程中,我们完成了将一些数据库条目标记为已删除并将其从用户看不见但从数据库中完全删除的任务。

我找到了django-logicaldelete(这正是我们想要做的事!),这是一个快速简单的解决方案

按照django-logicaldelete的指示,我使用pip安装了logicaldelete并将其作为INSTALLED_APP添加到settings.py

剩下的唯一事情就是在models.py和admin.py中添加逻辑删除

...
import logicaldelete

class MyModel(logicaldelete.models.Model){...}
... 

...
import logicaldelete
    
class MyModelAdmin(logicaldelete.admin.ModelAdmin){...}
... 

到目前为止一切顺利:)现在尝试运行项目会导致“ AppRegistryNotReady:尚未加载模型”。- 错误:

    Traceback (most recent call last):
      File "C:\Python34\lib\site-packages\django\db\models\options.py", line 414, in get_field_by_name
        return self._name_map[name]
    AttributeError: 'Options' object has no attribute '_name_map'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\django\db\models\options.py", line 561, in get_all_related_m2m_objects_with_model
    cache = self._related_many_to_many_cache
AttributeError: 'Options' object has no attribute '_related_many_to_many_cache'

During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "C:\eclipse\workspacePraxis\promotionsdatenbank\manage.py", line 10, in <module>
        execute_from_command_line(sys.argv)
      File "C:\Python34\lib\site-packages\django\core\management\__init__.py", line 385, in execute_from_command_line
        utility.execute()
      File "C:\Python34\lib\site-packages\django\core\management\__init__.py", line 354, in execute
        django.setup()
      File "C:\Python34\lib\site-packages\django\__init__.py", line 21, in setup
        apps.populate(settings.INSTALLED_APPS)
      File "C:\Python34\lib\site-packages\django\apps\registry.py", line 108, in populate
        app_config.import_models(all_models)
      File "C:\Python34\lib\site-packages\django\apps\config.py", line 202, in import_models
        self.models_module = import_module(models_module_name)
      File "C:\Python34\lib\importlib\__init__.py", line 109, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
      File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
      File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
      File "<frozen importlib._bootstrap>", line 1129, in _exec
      File "<frozen importlib._bootstrap>", line 1471, in exec_module
      File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
      File "C:\eclipse\workspacePraxis\promotionsdatenbank\personen\models.py", line 144, in <module>
        class PromovendChoice(forms.Form):
      File "C:\eclipse\workspacePraxis\promotionsdatenbank\personen\models.py", line 149, in PromovendChoice
        promovend_choice = forms.ModelChoiceField(queryset=Promovend.objects.all(), to_field_name='nachname', empty_label="Promovend")
      File "C:\Python34\lib\site-packages\django\db\models\manager.py", line 191, in all
        return self.get_queryset()
      File "C:\Python34\lib\site-packages\logicaldelete\managers.py", line 15, in get_queryset
        return LogicalDeleteQuerySet(self.model, using=self._db).filter(date_removed__isnull=True)
      File "C:\Python34\lib\site-packages\django\db\models\query.py", line 691, in filter
        return self._filter_or_exclude(False, *args, **kwargs)
      File "C:\Python34\lib\site-packages\django\db\models\query.py", line 709, in _filter_or_exclude
        clone.query.add_q(Q(*args, **kwargs))
      File "C:\Python34\lib\site-packages\django\db\models\sql\query.py", line 1287, in add_q
        clause, require_inner = self._add_q(where_part, self.used_aliases)
      File "C:\Python34\lib\site-packages\django\db\models\sql\query.py", line 1314, in _add_q
        current_negated=current_negated, connector=connector)
      File "C:\Python34\lib\site-packages\django\db\models\sql\query.py", line 1138, in build_filter
        lookups, parts, reffed_aggregate = self.solve_lookup_type(arg)
      File "C:\Python34\lib\site-packages\django\db\models\sql\query.py", line 1076, in solve_lookup_type
        _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
      File "C:\Python34\lib\site-packages\django\db\models\sql\query.py", line 1339, in names_to_path
        field, model, direct, m2m = opts.get_field_by_name(name)
      File "C:\Python34\lib\site-packages\django\db\models\options.py", line 416, in get_field_by_name
        cache = self.init_name_map()
      File "C:\Python34\lib\site-packages\django\db\models\options.py", line 445, in init_name_map
        for f, model in self.get_all_related_m2m_objects_with_model():
      File "C:\Python34\lib\site-packages\django\db\models\options.py", line 563, in get_all_related_m2m_objects_with_model
        cache = self._fill_related_many_to_many_cache()
      File "C:\Python34\lib\site-packages\django\db\models\options.py", line 577, in _fill_related_many_to_many_cache
        for klass in self.apps.get_models():
      File "C:\Python34\lib\functools.py", line 428, in wrapper
        result = user_function(*args, **kwds)
      File "C:\Python34\lib\site-packages\django\apps\registry.py", line 168, in get_models
        self.check_models_ready()
      File "C:\Python34\lib\site-packages\django\apps\registry.py", line 131, in check_models_ready
        raise AppRegistryNotReady("Models aren't loaded yet.")
    django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

我从django 1.7起就读过这个问题并作为解决方案

import django
django.setup()

给出。在这里,我不添加这些行。试图将其添加到logicaldelete.managers.py和logicaldelete.query.py中

似乎我弄错了主意是什么导致了问题。

错误回溯中显示的我自己的代码的唯一部分是在表单内进行此调用:

promovend_choice = forms.ModelChoiceField(queryset=Promovend.objects.all(), to_field_name='nachname', empty_label="Promovend")

希望您知道解决此问题的方法...

如果没有,我将覆盖删除方法并自行添加一个管理器。

更新编号 3

我已经实现了一个BaseModel和一个合适的Manager(与逻辑删除几乎没有区别)

class SoftDeleteBaseModel(models.Model):

    deleted = models.BooleanField(default=False)
    
    objects = SoftDeleteManager(False)
    objects_deleted = SoftDeleteManager(True)
    all_objects = models.Manager()
    
    def delete(self):
        related_models = [relation.get_accessor_name() for relation in self._meta.get_all_related_objects()]
        
        for model_objects in rleated_models:
            related_objects = getattr(self, model_objects).all()

            for related_object in related_objects:
                if not issubclass(related_object.__class__, SoftDeleteBaseModel):  
                    break
                related_object.delete()
        
        self.deleted= True
        self.save()
        
    class Meta:
        abstract = True

class SoftDeleteManager(models.Manager):
    
    def __init__(self, show_deleted=False):
        super(SoftDeleteManager, self).__init__()
        self.show_deleted = show_deleted
         
    def get_queryset(self):
        qs = super(SoftDeleteManager, self).get_queryset()
        return qs.filter(deleted=self.show_deleted)

不幸的是,发生相同的错误。在我的manager.py文件中将调用django.setup()导入django也不起作用。

致电(自制)经理时遇到了一些问题

objects = SoftDeleteManager(False)
objects_deleted = SoftDeleteManager(True)
all_objects = models.Manager()

我的模型想要引用它时,似乎SoftDeleteManger尚未准备好(加载)。

更新编号 4

新发现:

提示错误在于我的表单内,还不错!我想知道queryset = model.objects.all()与标准管理器一起使用能正常工作,用我的SoftDeleteManager替换它会导致错误...

这个想法浮出水面:为什么不使用standard-manager向该代码行添加过滤器?queryset = models.objects.all().filter(deleted=False)该代码也会导致AppRegistryNotReady错误-因此根本原因似乎是在我自制的Manager中过滤查询集...

编辑

我发现在此处过滤查询集存在类似问题但是正如顶部所述,我尝试使用import djangodjango.setup()没有成功...

更新编号 5

阅读一百次后,调用django.setup()将解决问题,我在我的models.py中调用了它,期望发生错误或运行成功...但是什么也没有发生。运行项目会创建一个python进程,但没有输出,开发服务器也不会启动...

问候,Tobi

托比

最终,我在之前的某个地方的帖子中找到了一个“隐藏”的解决方案(不幸的是,我丢失了源代码):

我的models.py中曾经django.form假设该表单的命令导致错误,我重新构建了我的应用程序并为该表单创建了一个单独的forms.py文件。终于,它的功能完美!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django-在models.py中过滤QuerySet

来自分类Dev

在Django 1.8或更高版本中填充时,出现“尚未加载模型”错误

来自分类Dev

Django 1.7升级错误:AppRegistryNotReady:模型尚未加载

来自分类Dev

Django 1.7'list_filter'引发AppRegistryNotReady(“尚未加载模型。”)

来自分类Dev

Django(&Pinax):追溯“ AppRegistryNotReady:应用尚未加载。” 例外

来自分类Dev

Pycharm 3.4.1-“ AppRegistryNotReady:模型尚未加载”。Django Rest框架

来自分类Dev

Django 1.8到1.9升级:django.core.exceptions.AppRegistryNotReady:应用尚未加载

来自分类Dev

Django 1.8:django.core.exceptions.AppRegistryNotReady:尚未加载模型

来自分类Dev

AppRegistryNotReady:应用尚未加载。Django的

来自分类Dev

Django-activity-stream:应用尚未加载

来自分类Dev

为什么执行Django查询会导致:django.core.exceptions.AppRegistryNotReady:尚未加载模型?

来自分类Dev

尚未加载模型

来自分类Dev

models.py中的Django过滤器关系

来自分类Dev

无法在djongo中创建EmbeddedField并收到此错误django.core.exceptions.AppRegistryNotReady:尚未加载模型

来自分类Dev

带有Djongo的Django,EmbeddedFields返回模型尚未加载

来自分类Dev

将模型导入到manage.py运行的文件中时,“尚未加载应用”

来自分类Dev

django导入导出应用程序错误:django.core.exceptions.AppRegistryNotReady:尚未加载模型

来自分类Dev

无法修复django.core.exceptions.AppRegistryNotReady:应用尚未加载

来自分类Dev

Django创建由组成员过滤的查询集会导致错误

来自分类Dev

在python Django中,我想查询表的foreignKey列,它引发django.core.exceptions.AppRegistryNotReady:模型尚未加载

来自分类Dev

django.core.exceptions.AppRegistryNotReady:模型尚未加载

来自分类Dev

VS2015 Django Shell中的Django 1.9.7 django.core.exceptions.AppRegistryNotReady:应用尚未加载

来自分类Dev

Django 1.10 AppRegistryNotReady:应用尚未加载。我不能使用django.setup

来自分类Dev

Django 问题:django.core.exceptions.AppRegistryNotReady:应用程序尚未加载

来自分类Dev

Django 模型过滤(查询)

来自分类Dev

Django 2.0 迁移错误:“django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。”

来自分类Dev

无法修复错误“django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。”

来自分类Dev

Django 应用程序尚未加载:如何导入模型

来自分类Dev

查询模型字段?在models.py中可以吗?

Related 相关文章

  1. 1

    Django-在models.py中过滤QuerySet

  2. 2

    在Django 1.8或更高版本中填充时,出现“尚未加载模型”错误

  3. 3

    Django 1.7升级错误:AppRegistryNotReady:模型尚未加载

  4. 4

    Django 1.7'list_filter'引发AppRegistryNotReady(“尚未加载模型。”)

  5. 5

    Django(&Pinax):追溯“ AppRegistryNotReady:应用尚未加载。” 例外

  6. 6

    Pycharm 3.4.1-“ AppRegistryNotReady:模型尚未加载”。Django Rest框架

  7. 7

    Django 1.8到1.9升级:django.core.exceptions.AppRegistryNotReady:应用尚未加载

  8. 8

    Django 1.8:django.core.exceptions.AppRegistryNotReady:尚未加载模型

  9. 9

    AppRegistryNotReady:应用尚未加载。Django的

  10. 10

    Django-activity-stream:应用尚未加载

  11. 11

    为什么执行Django查询会导致:django.core.exceptions.AppRegistryNotReady:尚未加载模型?

  12. 12

    尚未加载模型

  13. 13

    models.py中的Django过滤器关系

  14. 14

    无法在djongo中创建EmbeddedField并收到此错误django.core.exceptions.AppRegistryNotReady:尚未加载模型

  15. 15

    带有Djongo的Django,EmbeddedFields返回模型尚未加载

  16. 16

    将模型导入到manage.py运行的文件中时,“尚未加载应用”

  17. 17

    django导入导出应用程序错误:django.core.exceptions.AppRegistryNotReady:尚未加载模型

  18. 18

    无法修复django.core.exceptions.AppRegistryNotReady:应用尚未加载

  19. 19

    Django创建由组成员过滤的查询集会导致错误

  20. 20

    在python Django中,我想查询表的foreignKey列,它引发django.core.exceptions.AppRegistryNotReady:模型尚未加载

  21. 21

    django.core.exceptions.AppRegistryNotReady:模型尚未加载

  22. 22

    VS2015 Django Shell中的Django 1.9.7 django.core.exceptions.AppRegistryNotReady:应用尚未加载

  23. 23

    Django 1.10 AppRegistryNotReady:应用尚未加载。我不能使用django.setup

  24. 24

    Django 问题:django.core.exceptions.AppRegistryNotReady:应用程序尚未加载

  25. 25

    Django 模型过滤(查询)

  26. 26

    Django 2.0 迁移错误:“django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。”

  27. 27

    无法修复错误“django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。”

  28. 28

    Django 应用程序尚未加载:如何导入模型

  29. 29

    查询模型字段?在models.py中可以吗?

热门标签

归档