在 Django 中将管理器添加到 FlatPage 模型

Add a manager to FlatPage model in Django

我想在 Django 中扩展 FlatPage 模型,以便我可以在其领域内实现搜索。这就是我所做的:

models.py:

from django.db.models import Q
from django.contrib.flatpages.models import FlatPage

class FlatPageManager(models.Manager):
    def search(self, query=None):
        qs = self.get_queryset()
        if query is not None:
            or_lookup = (Q(title__icontains=query) |
                        Q(content__icontains=query)
                        )
            qs = qs.filter(or_lookup).distinct()
        return qs

class MyFlatPage(FlatPage):

    objects = FlatPageManager()

views.py:

class SearchView(ListView):
   [...]
    def get_context_data(self, *args, **kwargs):

        context['query'] = self.request.GET.get('q')
        return context

    def get_queryset(self):
        request = self.request
        query = request.GET.get('q', None)

        if query is not None:
            flatpage_results     = MyFlatPage.objects.search(query)


            qs = sorted(queryset_chain,
                        key=lambda instance: instance.pk,
                        reverse=True)
            return qs

上述搜索方法适用于我拥有的其他型号,因此它应该也适用于 MyFlatPage。尽管如此,我没有从该查询中得到任何结果。我错过了什么吗?

更新 1

空的是整个 MyFlatPage 列表:

>>> MyFlatPage.objects.all()
<QuerySet []>

django 模型继承有两种常见类型:proxy-models 和 as a new models。

如果您想使用 FlatPage table 作为新模型的 table - MyFlatPage 您必须将 MyFlatPage 定义为 proxy 一个通过在 Meta 中添加 proxy = True 标志:

class MyFlatPage(FlatPage):
    class Meta:
        proxy = True

在其他情况下,您将有另一个 table 用于 MyFlatPage