Python 如何在django上的url上放置搜索查询?

Python 如何在django上的url上放置搜索查询?,python,django,python-3.x,search,Python,Django,Python 3.x,Search,我正在用Django创建一个搜索应用程序 我制作了一个文章模型和一个反馈模型来记录文章的评分 进入搜索框并显示搜索结果后,单击其中一个结果,然后转到详细信息屏幕 在细节屏幕上选择feedback并按下submit按钮后,我想将搜索查询保存到feedback模型 我认为解决方案是在URL中添加一个查询,如portal/search/?=query,然后读取它,但我不知道如何编码。另外,你能告诉我,除了在URL中读取查询之外,是否还有其他实现方法 另外,当我从详细信息屏幕返回时,我也想显示以前的搜索

我正在用Django创建一个搜索应用程序

我制作了一个文章模型和一个反馈模型来记录文章的评分

进入搜索框并显示搜索结果后,单击其中一个结果,然后转到详细信息屏幕

在细节屏幕上选择feedback并按下submit按钮后,我想将搜索查询保存到feedback模型

我认为解决方案是在URL中添加一个查询,如
portal/search/?=query
,然后读取它,但我不知道如何编码。另外,你能告诉我,除了在URL中读取查询之外,是否还有其他实现方法

另外,当我从详细信息屏幕返回时,我也想显示以前的搜索结果

如果您有任何问题,请发表评论。 原谅我的英语不好

型号.py

来自django.db导入模型的

从django.url反向导入
从taggit.managers导入TaggableManager
类专有技术(models.Model):
基本标签=(
(‘1’,‘1’),
("2","2"),,
("三",,
("4","4"),,
(‘5’,‘5’),
(‘6’,‘6’),
)
类别=(
('1','Type2'),
('2','Type1'),
)
author=models.ForeignKey('auth.User',on_delete=models.CASCADE)
category=models.CharField(最大长度=1,选项=category,默认值=1)
title=models.CharField(最大长度=200)
text=models.TextField(空白=真,默认值=“”)
#delault='':如果文本列为空,导入系统将给出错误
file=models.FileField(blank=True,上传到class='explicit\u knowhows')
基本标签=models.CharField(最大长度=1,选项=basic标签,默认值=1)
自由标签=标签管理器(空白=真)
定义(自我):
返回自己的标题
def get_绝对_url(自身):
返回反向('门户:索引')
课堂反馈(models.Model):
影响=(
('1','great'),
('2','maybood'),
('3','bad'),
)
新奇的=(
(‘1’,‘我不知道’),
(‘2’,‘我知道,但我忘了’),
(‘3’,‘我知道这一点’),
)
kh=模型.ForeignKey(专有技术,on_delete=模型.PROTECT)
user=models.ForeignKey('auth.user',on_delete=models.CASCADE)
query=models.TextField(blank=True)
time=models.DateTimeField(auto\u now\u add=True)
功效=models.CharField(最大长度=1,选项=EFFECT,默认值=1)
新颖性=models.CharField(最大长度=1,选项=novely,默认值=1')
定义(自我):
返回self.time.strftime(“%Y/%m/%d%H:%m:%S”)
视图.py

从django.url导入反向,反向
从django.http导入HttpResponse
从django.views导入泛型
从django.views.generic.edit导入模型formmixin
从django.shortcuts导入重定向,获取\u object\u或\u 404
从django.core.exceptions导入权限被拒绝
从django.contrib.auth.mixins导入登录名RequiredMixin
从django.contrib.auth.decorators导入所需的登录名
从模型导入专有技术
从taggit.models导入标记
从.forms导入搜索表单,反馈表单
从django.db.models导入Q
"""
Django Auth
该登录需要mixin
https://docs.djangoproject.com/en/2.0/topics/auth/default/#the-需要登录的mixin
登录名需要decorator
https://docs.djangoproject.com/en/2.0/topics/auth/default/#the-需要登录的装饰程序
@需要登录
"""
类IndexView(LoginRequiredMixin,generic.list.ListView):
模型=专有技术
#分页单位=5
排序=['-标题']
#模板名称='portal/KnowHow\u list.html'
类详细视图(ModelFormMixin、LoginRequiredMixin、generic.detail.DetailView):
#从https://torina.top/detail/337/
模型=专有技术
形式\类别=反馈形式
模板名称='portal/KnowHow\u detail.html'
def表单_有效(自身、表单):
kh_pk=self.kwargs['pk']
反馈=form.save(提交=False)
Feedback.kh=get_object_或_404(专有技术,pk=kh_pk)
Feedback.query=“”
Feedback.user=self.request.user
Feedback.save()
返回重定向('门户:搜索')
def post(自我、请求、*args、**kwargs):
form=self.get\u form()
如果form.is_有效():
返回self.form\u有效(form)
其他:
self.object=self.get_object()
返回自我。表单_无效(表单)
类CreateView(LoginRequiredMixin,generic.edit.CreateView):#所需的LoginMixin
模型=专有技术
字段=['category'、'title'、'text'、'file'、'basic_tag'、'free_tags']
#模板名称='portal/KnowHow\u form.html'
def表单_有效(自身、表单):
#在发布有效表单数据时调用此方法。
#它应该返回一个HttpResponse。
# https://docs.djangoproject.com/en/2.0/topics/class-based-views/generic-editing/#models-和请求用户
form.instance.author=self.request.user
返回super(CreateView,self).form\u有效(form)
类UpdateView(LoginRequiredMixin,generic.edit.UpdateView):#所需的LoginRequiredMixin
模型=专有技术
字段=['category'、'title'、'text'、'file'、'basic_tag'、'free_tags']
#模板名称='portal/KnowHow\u form.html'
类DeleteView(LoginRequiredMixin,generic.edit.DeleteView):#所需的LoginRequiredMixin
模型=专有技术
成功\u url=reverse\u lazy('门户:索引')
def删除(self、request、*args、**kwargs):
结果=super().delete(请求,*args,**kwargs)
Tag.objects.filter(knowhow=None).delete()
返回结果
#模板名称='portal/KnowHow\u confirm\u delete.html'
类SearchIndexView(LoginRequiredMixin,generic.ListView):
template\u name=“search/search\u index.html”
模型=专有技术
def post(自我、请求、*args、**kwargs):
形式_值=[
self.request.POST.get('basic_tag',None),
self.request.POST.get('free_tags',None),
]
请求。会话['form_value']=form_value
self.request.GET=self.request.GET.copy()
# You are probably doing something like this
{% for r in results %}
<a href="{{r.absolute_url}}">{{r.name}}</a>
{% endfor %}

# You should do this instead
{% for r in results %}
<a href="{{r.absolute_url}}{{current_query}}">{{r.name}}</a>
{% endfor %}
context['basic_tag'] = basic_tag
context['free_tags'] = free_tags
<a href="{% url 'portal:detail' KnowHow.pk %}{{current_query}}">{{ KnowHow.title }}</a>