Python 在django中发出搜索请求

Python 在django中发出搜索请求,python,Python,我正试图为我的django项目创建一个搜索栏,但无论何时搜索某个项目,它都会返回默认情况下存在的所有内容 以下是inside views.py中的代码: def index(request): if not request.user.is_authenticated(): return render(request, 'Lfm/login.html') else: lfm = Lfm.objects.filt

我正试图为我的django项目创建一个搜索栏,但无论何时搜索某个项目,它都会返回默认情况下存在的所有内容

以下是inside views.py中的代码:

    def index(request):
        if not request.user.is_authenticated():
            return render(request, 'Lfm/login.html')
        else:
            lfm = Lfm.objects.filter(user=request.user)
            query = request.GET.get('q')
            if query:
                Lfm = lfm.filter(
                Q(name__icontains=query) |
                Q(region__icontains=query) |
                Q(rank__icontains=query)
                ).distinct()
                return render(request, 'Lfm/index.html', {'lfm': Lfm,})
            else:
        return render(request, 'Lfm/index.html', {'Lfm': lfm })
models.py文件:

class Lfm(models.Model):
    name = models.CharField(max_length=20)
    rank = models.CharField(max_length=20, choices=RANKS)
    rank_sr = models.IntegerField()
    region = models.CharField(max_length=20, choices=REGIONS)
    roles = models.CharField(max_length=30, choices=ROLES)
    btag = models.CharField(max_length=30)
    time = models.CharField(max_length=14, choices=TIMES)
    logo = models.FileField()
    contact_email = models.EmailField()
和base.html

<form class="navbar-form navbar-left" role="search" method="get" action="{% url 'Lfm:index' %}">
                <div class="form-group">
                    <input type="text" class="form-control" name="q" value="{{ request.GET.q }}">
                </div>
                <button type="submit" class="btn btn-default">Search</button>
            </form>

搜寻

您需要在初始查询中运行筛选器

def index(request):
    if not request.user.is_authenticated():
        return render(request, 'Lfm/login.html')
    else:
        lfm = Lfm.objects.filter(Q(user=request.user, Q(
            Q(name__icontains=query) |
            Q(region__icontains=query) |
            Q(rank__icontains=query))
            ).distinct()

您有一个简单的命名错误! 您的模型类称为
Lfm
。您可以命名结果
Lfm
。那不行

重命名您的结果(例如,
query\u result=lfm.filter(…
),一切都会解决

顺便说一句:你似乎使用了很多相似的、突兀的名称。这会产生难以阅读的代码。试着使用更多的解释性名称,这样的错误应该不会经常发生