Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django迁移值错误:在Django.db.models.manager中找不到管理器_Django_Django Migrations_Django Managers_Django Sites - Fatal编程技术网

Django迁移值错误:在Django.db.models.manager中找不到管理器

Django迁移值错误:在Django.db.models.manager中找不到管理器,django,django-migrations,django-managers,django-sites,Django,Django Migrations,Django Managers,Django Sites,我正在尝试从Django 1.7更新到Django 1.8 我的一个模型使用了django.contrib.sites.managers中的CurrentSiteManager,如下所示: from django.contrib.sites.managers import CurrentSiteManager class NewsQuerySet(models.QuerySet): #... class News(models.Model): #... object

我正在尝试从
Django 1.7
更新到
Django 1.8

我的一个模型使用了
django.contrib.sites.managers
中的
CurrentSiteManager
,如下所示:

from django.contrib.sites.managers import CurrentSiteManager

class NewsQuerySet(models.QuerySet):
    #...

class News(models.Model):
    #...

    objects = NewsQuerySet.as_manager()
    on_site = CurrentSiteManager.from_queryset(NewsQuerySet)()
当我尝试运行迁移(makemigrations或migrate)时,我得到:

ValueError:找不到管理器CurrentSiteManagerFromNewsQuerySet 在django.db.models.manager中。请注意,您需要从继承 使用“from_queryset()”动态生成的管理器

如果我删除网站上的
管理器,一切正常


有什么办法可以克服这个问题吗?

事实证明,Django 1.8
管理者使用
在迁移中使用

并且
CurrentSiteManager
标记为

因此,解决方法是设置
在迁移中使用\u=False
。我是这样做的:

class NewsSiteManager(CurrentSiteManager.from_queryset(NewsQuerySet)):
    use_in_migrations = False


class News(models.Model):
    #...

    objects = NewsQuerySet.as_manager()
    on_site = NewsSiteManager()

公认的答案是可行的,但如果您真的想将管理器序列化为迁移的一部分(这样您就可以使用它们!),那就不太好了

要做到这一点,您需要按照错误消息所述,从生成的管理器继承,然后使用您的子类:

from django.contrib.sites.managers import CurrentSiteManager as DjangoCurrentSiteManager

class NewsQuerySet(models.QuerySet):
    pass

class CurrentSiteManager(DjangoCurrentSiteManager.from_queryset(NewsQuerySet)):
    pass

class News(models.Model):
     # Fields...

    objects = NewsQuerySet.as_manager()
    on_site = CurrentSiteManager()

有一个更好的方法可以做到这一点

from django.db import models

class NewsManager(models.Manager.from_queryset(NewsQuerySet)):
    use_in_migrations = True


class News(models.Model):
    ...

    objects = NewsManager()
然后,您可以使用
CurrentSiteManager
对象执行任何其他操作