Django:如何在Django中使用DateTimeField DB过滤用户输入日期,将过滤器选项作为字典传递?

时间:2016-05-07 02:52:17

标签: python django django-models django-queryset

我有从前端用户输入的搜索选项。

template = Template('''<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Streaming Example</title>
        {{ js_resources }}
        {{ css_resources }}
    </head>
    <body>
    {{ plot_div }}
    {{ plot_script }}
    </body>
</html>
''')

@app.route("/")
def simple():
    streaming=True
    source = AjaxDataSource(data_url="http://localhost:5000/data", 
                            polling_interval=1000, mode='append')

    fig = figure(title="Streaming Example")
    fig.line( 'x', 'y', source=source)

    js_resources = INLINE.render_js()
    css_resources = INLINE.render_css()

    script, div = components(fig, INLINE)

    html = template.render(
        plot_script=script,
        plot_div=div,
        js_resources=js_resources,
        css_resources=css_resources
    )

    return encode_utf8(html) 

然后我使用DB中的列名映射这些值。

search = {"Date":"2016-02-07","Status":"pass" }

现在我在DB中有DateTimeField。当我使用过滤器时,我正在尝试下面的一个:

query_to_field_mapping = {"Date": "date","Status": "result"}

query = {query_to_field_mapping[key]: value for key, value in search.items()}

这里我试图根据日期字段&amp;想要获得过滤记录。我尝试了同样没有成功。我怎么办?

任何帮助都会很棒!!!

我尝试了SO中的其他问题:How can I filter a date of a DateTimeField in Django?

我无法找到解决问题的方法,因为我们正在逐一传递列名。但是现在我正以字典传递。

1 个答案:

答案 0 :(得分:1)

你的方法是正确的。它不起作用的原因是因为您通过提供datetime字符串来过滤date字段的相等性,因此2016-02-07日期(您的查询参数)不等于{{1 (DB中可能的值)。

要克服这种情况,请使用您自己问题链接中的一种字段查找功能。作为一个具体的例子,让我们使用2016-02-07T12:32:22字段查找,如下所示:

contains

因此,在将query_to_field_mapping = {"Date": "date__contains","Status": "result"} 传递给query_to_field_mapping时,它会在您需要的日期时间内查找日期。