匹配字符串与数据库字段django

时间:2014-05-26 13:42:15

标签: python django python-2.7

我django如何检查数据库中是否存在特定单词。 例如,如果数据库列包含' hello,welcome,world '。如果我发送请求 的 Q =欢迎 如何检查我的数据库 classs 列中是否存在特定的“欢迎”?

views.py

from django.shortcuts import render
from django.http import HttpResponse
from airapp.models import Travel
from django.db.models import Q

def search_form(request):
    return render(request, 'search_form.html')


def search(request):
    if 'f' in request.GET and request.GET['f']:
        q = request.GET['f']
        r = request.GET['t']
        s = request.GET['c']


        books = Travel.objects.filter(Q(classs__contains=s),
                                       froms__icontains=q,to=r)
        return render(request, 'search_results.html',
            {'books': books, 'query': q})
    else:
        return HttpResponse('Please submit a search term.')    

models.py

from django.db import models

class Travel(models.Model):
    froms = models.CharField(max_length=30)
    to = models.CharField(max_length=30)
    classs = models.CharField(max_length=20)
    details = models.CharField(max_length=3330)


    def __unicode__(self):
        return self.froms

seach_form.html

<html>
<head>
    <title>Search</title>
    <script language="JavaScript" type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
    <script language="JavaScript" type="text/javascript">
        $(function() {
            $("#search-form").submit(function() {
                var from = $("#search-form :input[name='f']").val();
                var tos  = $("#search-form :input[name='t']").val();
                var clas = $("#search-form :input[name='c']").val();
                $.get("/search/", { f : from, t:tos, c:clas })
                    .done(function(data) {
                        $("#search-result").html(data);
                        $("#search-result").show();
                    });
                return false;
            })});
    </script>
</head>
<body>
    <form id="search-form">
        FROM<input type="text" name="f"><br>
        TO<input type="text" name="t"><br>
        CLASS<input type="text" name="c"><br>
        <input type="submit" value="Search">
    </form>

    <div id="search-result" style="display:none">
    </div>
</body>
</html>

我该如何查看django查询。

1 个答案:

答案 0 :(得分:1)

首先,containsicontains之间的区别仅在于icontainscontains的不区分大小写的版本。两个查找都匹配部分字符串,例如

Entry.objects.get(headline__contains='Lennon')

对应SQL

SELECT ... WHERE headline LIKE '%Lennon%';

(来自Django文档)

如果您不想匹配子字符串,但要匹配列中的确切字符串,请分别使用exactiexact

如果你的classs列包含多个以逗号分隔的条目,我想这有点棘手。 您可以确保每个条目以逗号(也是最后一个)结尾,然后查询“欢迎”,例如(尽管有点hacky)。然而,我仍然不确定这是否是您想要解决的问题。