在 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
。
我想在 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
。