0

我正在制作一个使用 Postgres进行全文搜索的 Django 网站。但是,当我进行搜索时,没有显示任何结果。是不是我做错了什么?这是我的代码:

视图.py

from django.shortcuts import render
from django.contrib.postgres.search import SearchVector, SearchQuery, SearchRank
from django.views.generic import ListView, FormView
from .models import Post
from .forms import *

# Create your views here.

class HomepageView(FormView):
    template_name = 'selling/home.html'
    form_class = SearchForm

class Search(ListView):
    model = Post
    template_name = 'selling/search.html'

    def get_queryset(self):
        query = self.request.GET.get('q')
        posts = Post.objects.annotate(
            search=SearchVector('title', 'description'),
        ).filter(search=SearchQuery(query))
        return posts

模型.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    book_author = models.CharField(max_length=30)
    phone_contact = models.CharField(max_length=20)
    price = models.DecimalField(max_digits=7,decimal_places=2)
    postal_code = models.CharField(max_length=20)

    def __str__(self):
        return self.title

表格.py

from django import forms

class SearchForm(forms.Form):
    q = forms.CharField(label='Search', max_length=50)

搜索.html

{% extends "selling/base.html" %}
{% load static %}
{% block content %}
<div class="container pt-5 pb-5">
    <div class="ui divided items">
        {% for item in posts %}
        <div class="item">
            <div class="image">
                <img src="{% static 'selling/images/brebeuf.png' %}">
            </div>
            <div class="content item-container">
                <a class="header item-title">{{ item.title }} </a><b class="item-price-right">${{ item.price }}</b>
                <div class="meta">
                    <span>{{ item.postal_code }} &emsp; | &emsp; {{ item.date_posted|date:"d/m/Y" }}</span>
                </div>
                <div class="description item-description">
                    <p>{{ item.description }}</p>
                </div>
            </div>
        </div>
        {% endfor %}
    </div>
</div>
{% endblock content %}

主页.html

{% extends "selling/base.html" %}
{% load static %}
{% block content %}
<form action="{% url 'search' %}" method='get'>
  {{ form }}
</form>
{% endblock content %}

settings.py - 已安装的应用程序

INSTALLED_APPS = [
    'selling.apps.SellingConfig',
    'users.apps.UsersConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.postgres',
]

网址.py

from django.urls import path
from .views import Search, HomepageView

urlpatterns = [
    path('', HomepageView.as_view(), name='sell-home'),
    path('search/', Search.as_view(), name='search'),
]

这就是所有的代码。随意询问您是否需要其他任何东西。

4

0 回答 0