提问人:HBMCS 提问时间:6/16/2020 最后编辑:HBMCS 更新时间:12/31/2020 访问量:95
在 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 []>
答:
0赞
ncopiy
6/16/2020
#1
django 模型继承有两种常见的类型:代理模型和新模型。
如果要将表用作新模型的表,则必须通过在以下位置添加标志来定义为代理表:FlatPage
MyFlatPage
MyFlatPage
proxy = True
Meta
class MyFlatPage(FlatPage):
class Meta:
proxy = True
在其他情况下,您将有另一个表 。MyFlatPage
评论
>>> MyFlatPage.objects.search('the') <QuerySet []>
>>> MyFlatPage.objects.all() <QuerySet []>
or
request.GET.get('q', None)
request.query_params
sorted
qs = qs.order_by("-id")
MyFlatPage
FlatModel
MyFlatModel
proxy = True
Meta
FlatModel
MyFlatModel
proxy=True
Meta