【问题标题】:How to avoid error 1146 on migration?如何避免迁移时出现错误 1146?
【发布时间】:2016-11-14 06:34:42
【问题描述】:

当我尝试在新数据库上不进行迁移时,我收到此错误:

django.db.utils.ProgrammingError: (1146, "表 'dorogi_test.activities_category' 不存在")

它是由这个查询提出的:

models.Category.objects.filter(level=0, active=True).get_descendants(include_self=True)

迁移前执行,所以不存在不存在的表。

我尝试执行以下操作:

def get_top_news_category():
    if models.Category.objects.exists():
        return models.Category.objects.filter(level=0, active=True).get_descendants(include_self=True)


@permission_classes((permissions.AllowAny,))
class TopNewsViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
    serializer_class = ArticleSerializer
    c = get_top_news_category()
    queryset = models.Article.objects.filter(hot=True, category__in=c).order_by('-id')[:3]

但我的代码在此检查时也会崩溃。如何避免这个错误,让 Django 在不注释代码的情况下开始迁移?

【问题讨论】:

    标签: django database django-migrations


    【解决方案1】:

    哦。那很简单。只需将所有内容都包装到函数中:

    @permission_classes((permissions.AllowAny,))
    class TopNewsViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
        serializer_class = ArticleSerializer
    
        def get_queryset(self):
            c = models.Category.objects.filter(level=0, active=True).get_descendants(include_self=True)
            return models.Article.objects.filter(hot=True, category__in=c).order_by('-id')[:3]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多