Как я могу выполнить поиск по тегу, чтобы получить экземпляры страницы по API? - PullRequest
0 голосов
/ 11 июля 2020
**I want to search a tag like below**
search_query = request.GET.get('query', None)
# via this method, I can get some page instances which title or intro contain search_query keyword
search_results = ProductionPage.objects.live().search(search_query)

есть ли способы получить результат, в котором search_query равен тегу?

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Если вы хотите найти точные совпадения в определенном поле c, используйте filter вместо search.

ProductionPage.objects.live().filter(tags__name=search_query)
0 голосов
/ 11 июля 2020
**This is my page model**
from taggit.models import TaggedItemBase
class ProductionPageTag(TaggedItemBase):
    content_object = ParentalKey(
        'ProductionPage',
        related_name='tagged_items',
        on_delete=models.CASCADE
    )
class ProductionPage(Page):
    date = models.DateField(null=True, verbose_name="Post date")
    intro = models.CharField(blank=True, null=True, verbose_name='简介', max_length=250)
    body = RichTextField(null=True, verbose_name='内容主体', blank=True)
    tags = ClusterTaggableManager(through=ProductionPageTag, blank=True)

    def main_image(self):
        gallery_item = self.gallery_images.first()
        if gallery_item:
            return gallery_item.image
        else:
            return None

    search_fields = Page.search_fields + [
        index.SearchField('intro'),
        index.SearchField('body'),
    ]
    api_fields = [
        APIField("body"),
        APIField("date"),
        APIField("gallery_images"),
    ]

    content_panels = Page.content_panels + [
        MultiFieldPanel([
            FieldPanel('date'),
            FieldPanel('tags'),
        ], heading="文章信息"),
        FieldPanel('intro'),
        FieldPanel('body', classname="full"),
        InlinePanel('gallery_images', heading='作品图片集 --- 第一张图选为封面', label="图片"),
    ]

    class Meta:
        verbose_name = "Production Page"
        verbose_name_plural = "Production Pages"
...