django - Wagtail:通过模型过滤 ManyToMany 上的搜索

标签 django wagtail

Wagtail中基于网站,我有一个 ArticlePage 模型,该模型与多对多关系中的 Author 代码段模型相关,如下所示:

from django.db import models
from modelcluster.fields import ParentalKey
from wagtail.core.models import Orderable, Page
from wagtail.search import index
from wagtail.snippets.models import register_snippet

class ArticlePage(Page):
    search_fields = Page.search_fields + [
       index.FilterField('author_id'),
    ]

@register_snippet
class Author(models.Model):
    name = models.CharField(max_length=255, blank=False)

class ArticleAuthorRelationship(Orderable, models.Model):
    author = models.ForeignKey('Author', on_delete=models.CASCADE, related_name='articles')
    page = ParentalKey('ArticlePage', on_delete=models.CASCADE, related_name='authors')

我希望能够搜索 ArticlePage 并按特定的作者过滤它们,我可以这样做:

author = Author.objects.get(id=1)

articles = ArticlePage.objects.live() \
                              .filter(authors__author=author) \
                              .search('football')

但是在开发服务器日志中我收到此警告:

articles.ArticlePage: ArticlePage.search_fields contains non-existent field ‘author_id’

我的问题是:我这样做对吗?它有效,但警告让我认为可能有更正确的方法来实现相同的结果。

我还尝试使用FilterField('authors'),它可以停止警告,但我不知道如何过滤它。

最佳答案

正确的方法在 documentation 中有解释

这里是官方文档中分享的一个示例:

from wagtail.search import index

class Book(models.Model, index.Indexed):
    ...

    search_fields = [
        index.SearchField('title'),
        index.FilterField('published_date'),

        index.RelatedFields('author', [
            index.SearchField('name'),
            index.FilterField('date_of_birth'),
        ]),
    ]

所以在你的情况下,你应该写:

class ArticlePage(Page):
    search_fields = Page.search_fields + [
       index.RelatedFields(
            "author", [index.SearchField("id")]
        ),
    ]

让我知道它是否有效

关于django - Wagtail:通过模型过滤 ManyToMany 上的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53848209/

相关文章:

Django ManytoMany 未显示在管理中

python - 具有隐藏所有网站页面的登录名和密码的 Django 中间件

wagtail - 在 Wagtail 多站点设置中为每个站点设置 404

django - 如何在 Wagtail CMS 中为 ImageChooserBlock 添加矢量图像支持?

django - 在 wagtail admin 中内联编辑 django 'through' 模型?

python - Django 与 mongodb 和 mysql 其中每个数据库用于不同的数据

python - Django oauth2 request.user 返回 AnonymousUser

sql - 删除的 SQL 条目是否仍然占用空间/行?

django - Wagtail 索引 : Exclude some content or use queryset?

python - 鹡鸰定制管理员