django haystack 自定义表单

2024-03-10

我正在尝试使用 django haystack 制作自定义搜索表单,我只是从 haystack 的文档中进行修改:

forms.py

from django import forms
from haystack.forms import SearchForm

class DateRangeSearchForm(SearchForm):
    start_date = forms.DateField(required=False)
    end_date = forms.DateField(required=False)

   def search(self):
        # First, store the SearchQuerySet received from other processing.
        sqs = super(DateRangeSearchForm, self).search()

        # Check to see if a start_date was chosen.
        if self.cleaned_data['start_date']:
            sqs = sqs.filter(pub_date__gte=self.cleaned_data['start_date'])

        # Check to see if an end_date was chosen.
        if self.cleaned_data['end_date']:
            sqs = sqs.filter(pub_date__lte=self.cleaned_data['end_date'])

        return sqs

to :

from django import forms
from haystack.forms import HighlightedModelSearchForm

class CustomSearchForm(HighlightedModelSearchForm):
    title   = forms.CharField(max_length = 100, required = False)
    content = forms.CharField(max_length = 100, required = False)
    date_added = forms.DateField(required = False)
    post_by = forms.CharField(max_length = 100, required = False)

    def search(self):
        sqs = super(CustomSearchForm, self).search()
        if self.cleaned_data['post_by']:
            sqs = sqs.filter(content = self.cleaned_data['post_by'])
        if self.cleaned_data['title']:
            sqs = sqs.filter(content = self.cleaned_data['title'])
        if self.cleaned_data['content']:
            sqs = sqs.filter(content = self.cleaned_data['content'])
        if self.cleaned_data['date_added']:
            sqs = sqs.filter(content = self.cleaned_data['date_added']) 
        return sqs

干草堆.urls:

urlpatterns = patterns('haystack.views',
    url(r'^$', search_view_factory(view_class = SearchView, form_class = CustomSearchForm), name='haystack_search'),
)

当我访问该网址时,它显示:AttributeError at /search/

“CustomSearchForm”对象没有属性“cleaned_data”

你们能帮我吗?谢谢

然后我尝试评论搜索方法,但是当我向自定义字段提交一个单词时,结果总是什么都没有,只有当我向非自定义字段提交一个单词时它才能给出我想要的结果,已经尝试理解这一点一整天,请帮忙


我知道这是一个有点老的问题,但为了帮助其他可能正在查看此问题并想知道同样问题的人,这就是我在相同情况下如何让它发挥作用的方法。

沿着这些思路:

...
def search(self)
    sqs=super(MyFooSearchForm, self).search()

    if self.is_valid() and self.cleaned_data['foo']:
        sqs = sqs.filter(foostuff__exact=self.cleaned_data['foo'])

    return sqs

基本上,我在 self.cleaned_data[''] 之前添加了 'self.is_valid and' 这为我消除了错误。希望这可以帮助。

So,

def search(self):
    sqs = super(CustomSearchForm, self).search()
    if self.cleaned_data['post_by']:
        sqs = sqs.filter(content = self.cleaned_data['post_by'])
    if self.cleaned_data['title']:
        sqs = sqs.filter(content = self.cleaned_data['title'])
    if self.cleaned_data['content']:
        sqs = sqs.filter(content = self.cleaned_data['content'])
    if self.cleaned_data['date_added']:
        sqs = sqs.filter(content = self.cleaned_data['date_added']) 
    return sqs

会成为:

def search(self):
    sqs = super(CustomSearchForm, self).search()
    if self.is_valid() and self.cleaned_data['post_by']:
        sqs = sqs.filter(content = self.cleaned_data['post_by'])
    if self.is_valid() and self.cleaned_data['title']:
        sqs = sqs.filter(content = self.cleaned_data['title'])
    if self.is_valid() and self.cleaned_data['content']:
        sqs = sqs.filter(content = self.cleaned_data['content'])
    if self.is_valid() and self.cleaned_data['date_added']:
        sqs = sqs.filter(content = self.cleaned_data['date_added']) 
    return sqs

可能有更好的方法来做到这一点,我是 django/python 的相对初学者,但它对我有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django haystack 自定义表单 的相关文章

随机推荐

  • Powershell 删除项目无法从函数中运行

    我需要将别名 cd 替换为名为 cd 的函数 我尝试从函数中删除别名 但没有成功 以下是一个简单的测试脚本 function remove alias get command cd Remove Item Path Alias cd get
  • 如何在 SVN Tortoise Commit 上不显示对话框?

    我有一个修改一些文件的过程 我想通过命令行 tortoise SVN 提交它们 而不必单击 确定 出现对话框 我的脚本被迫等待 直到我单击 确定 以下是我正在使用的论点 TortoiseProc exe command commit pat
  • ES6 的 webcomponents-lite 在 IE 11 和 10 中不起作用

    我们使用带有 ES6 语法的 WebComponents Web组件 http webcomponents org 填充材料webcomponents lite js 不包括 ShadowDOM 无法在 IE 11 中运行而 webcomp
  • 调整 UILabel 的大小以适合自定义 UITableViewCell 内的文本,无论宽度如何

    我试图让单元格中的标签具有正确的尺寸 无论设备或方向如何 我能够正确调整行高的大小 我还可以正确设置标签高度cellForRowAtIndexPath 并可以在我的日志中查看 但是 当它到达willDisplayRowAtIndexPath
  • 为什么在Python中关闭Sqlite3的游标

    使用Python时关闭游标有什么好处sqlite3模块 https docs python org 2 7 library sqlite3 html module sqlite3 或者它只是一个人工制品数据库API v2 0 https w
  • matplotlib 轴标签格式

    我对轴刻度标签的格式有疑问 我禁用了 y 轴的偏移 ax1 ticklabel format style sci useOffset False 并试图将其采用科学格式 但我得到的只是 0 00355872 但我期望的是这样的 3 5587
  • 在 EmberJS 中构建自动刷新的嵌套列表

    我如何在 EmberJS 中动态生成和更新嵌套列表 我的模型看起来像 App Node Em Object extend id 0 parentId 0 title The parentId代表id直接父元素的 如果我有数据 控制器内容中的
  • 如何在使用“.NETFramework,Version=v4.5.2”的项目中安装 System.Drawing.Common?

    我试图在 NETFramework Version v4 5 2 应用程序中用 C 编写一些单元测试 但所有测试都会给出下一个错误 System IO FileNotFoundException 无法加载文件或程序集 System Draw
  • SDL2 - 垂直同步不起作用

    我在程序中使用垂直同步 在我最小化窗口之前它工作正常 我在创建渲染器时这样做了 renderer SDL CreateRenderer window 1 SDL RENDERER ACCELERATED SDL RENDERER PRESE
  • 为什么 getoldtweets3 库提供 404 错误?

    我正在使用 getoldtweets3 库来抓取电晕爆发信息 我收到这个错误 error C Users Vilius anaconda3 python exe C Users Vilius PycharmProjects Sentimen
  • 使用 JSoup 解析 Html

    我正在尝试解析以下 URL 的 html http ocw mit edu courses aeronautics and astronautics 16 050 Thermal energy fall 2002 http ocw mit
  • 使用 DllImport 调用 C++ 函数

    这是基本的 如何从 C DllImport 调用下面的函数 SubscribeNewsFeed class LogAppender public L Append public LogAppender outfile TestLog txt
  • 如何声明二维字符串数组?

    string Tablero new string 3 3 我需要有一个 3x3 数组排列来保存信息 我如何在 C 中声明它 string Tablero new string 3 3 您还可以使用数组初始值设定项语法在同一行中实例化它 如
  • 如何强制 Gradle 重新下载依赖项?

    如何告诉 Gradle 从存储库重新下载依赖项 通常 您可以使用命令行选项刷新缓存中的依赖项 刷新依赖项 https docs gradle org current userguide dependency management html
  • JAGS 中缺少预测数据模型

    我正在尝试在 JAGS 中编写最简单的缺失数据模型 一个预测变量 有一些缺失的数据点 和一个结果变量 我知道这个例子不是最有用或最现实的 但它可以帮助我在继续处理更复杂的缺失预测数据场景之前解决模型问题 模型和数据如下 但这是编译错误 Er
  • 动态 UILabel 大小 iOS 7 问题

    我正在尝试根据文本高度动态调整标签大小 UILabel 中的高度可以从 0 行到多行不等 我已经为这个问题提出了一个解决方案 该解决方案在 iOS 8 上运行良好 但在 iOS 7 1 上失败 我也试图支持它 该项目中未使用自动布局 所有约
  • 有限字符池中不存在重复字符的正则表达式

    有没有办法编写正则表达式来匹配仅包含某些字符的字符串 并且从不重复这些字符 我已经使用一组代码编写了一些代码来实现此目的 但想知道是否有正则表达式的方法可以做到这一点 例如 如果我只想要一个包含 A B C 的字符串 并且我想匹配一个从不重
  • 如何弃用 Protocol Buffers 中的整个消息?

    根据文档 https developers google com protocol buffers docs proto 已弃用 字段选项 如果设置为 true 则表示该字段已弃用 并且不应由新代码使用 使用示例 message Foo s
  • sqlalchemy 中 sql LIKE 的反向版本[重复]

    这个问题在这里已经有答案了 我所说的 类似的反向版本 是指完全一样这个问题 https stackoverflow com questions 472063 mysql what is a reverse version of like 问
  • django haystack 自定义表单

    我正在尝试使用 django haystack 制作自定义搜索表单 我只是从 haystack 的文档中进行修改 forms py from django import forms from haystack forms import Se