如何在django中过滤数据?

如何在django中过滤数据?,django,django-templates,django-filter,Django,Django Templates,Django Filter,我使用分页到我的视图,可以用subject_name关键字搜索数据,但现在我想根据主题持续时间以下拉格式搜索它们 views.py def servicesview(request): key = request.GET.get("search_key", "") inst = request.GET.get("search_key1", "") q_objects = Q() if key: q_objects.add(Q(subject_nam

我使用分页到我的视图,可以用subject_name关键字搜索数据,但现在我想根据主题持续时间以下拉格式搜索它们

views.py

def servicesview(request):
    key = request.GET.get("search_key", "")
    inst = request.GET.get("search_key1", "")
    q_objects = Q()
    if key:
        q_objects.add(Q(subject_name__icontains=key), Q.AND)
    if inst:
        q_objects.add(Q(subject_duration=inst), Q.AND)
    if q_objects:
        services = ServicesData.objects.filter(q_objects)
    else:
        services = ServicesData.objects.all()
        page = request.GET.get('page', 1)
        paginator = Paginator(services, 2)
    try:
        services = paginator.page(page)
    except PageNotAnInteger:
        services = paginator.page(1)
    except EmptyPage:
        services = paginator.page(paginator.num_pages)
    return render(request, 'services.html',
               {'services': services, 'key': key,'inst':inst})
services.html

<form>
   <input type="text" name="search_key" value="{{key}}" 
    placeholder="Search..">
    <select>
        <option name="search_key1" value="{{inst}}">Select your 
    option</option>
    </select>
    <input type="submit" value="Submit">
    </form>

选择您的
选项
但我没有在受试者持续时间内获得数据:

请有人帮忙试试这个

q_对象将收集所有筛选数据并传递给queryset

from django.db.models import Q

def servicesview(request):
    key = request.GET.get("search_key", "")
    search_key1 = request.GET.get("search_key1", "")
    q_objects = Q()
    if key:
        q_objects.add(Q(subject_name__icontains=key), Q.AND)
    if search_key1:
        q_objects.add(Q(search_key1=search_key1), Q.AND)
    if q_objects:
        services = ServicesData.objects.filter(q_objects)
    else:
        services = ServicesData.objects.all()
        page = request.GET.get('page', 1)
        paginator = Paginator(services, 2)
        try:
            services = paginator.page(page)
        except PageNotAnInteger:
            services = paginator.page(1)
        except EmptyPage:
            services = paginator.page(paginator.num_pages)
    return render(request, 'services.html',
                   {'services': services, 'key': key})
试试这个

q_对象将收集所有筛选数据并传递给queryset

from django.db.models import Q

def servicesview(request):
    key = request.GET.get("search_key", "")
    search_key1 = request.GET.get("search_key1", "")
    q_objects = Q()
    if key:
        q_objects.add(Q(subject_name__icontains=key), Q.AND)
    if search_key1:
        q_objects.add(Q(search_key1=search_key1), Q.AND)
    if q_objects:
        services = ServicesData.objects.filter(q_objects)
    else:
        services = ServicesData.objects.all()
        page = request.GET.get('page', 1)
        paginator = Paginator(services, 2)
        try:
            services = paginator.page(page)
        except PageNotAnInteger:
            services = paginator.page(1)
        except EmptyPage:
            services = paginator.page(paginator.num_pages)
    return render(request, 'services.html',
                   {'services': services, 'key': key})

您没有相应地填充您的。您需要在html中循环使用可能的选项,例如

<select>
    <option name="search_key1" value="">Make you choice</option>
    {% for service in services %}
    <option name="search_key1" value="{{ service.subject_duration }}">{{ service.subject_duraion }}</option>
    {% endfor %}
</select>

然后将其添加到渲染的上下文中,并如上所述在其上循环。

您没有相应地填充渲染。您需要在html中循环使用可能的选项,例如

<select>
    <option name="search_key1" value="">Make you choice</option>
    {% for service in services %}
    <option name="search_key1" value="{{ service.subject_duration }}">{{ service.subject_duraion }}</option>
    {% endfor %}
</select>

然后将其添加到渲染的上下文中,并如上所述在其上循环。

答案如下

def servicesview(request):
    keyword = Db.objects.all().values_list('keyword', flat=True)
    sub = request.GET.get("search_key", "")
    q_objects = Q()
    if sub:
        q_objects.add(Q(subject_name__icontains=sub), Q.AND)
    if q_objects:
        services = ServicesData.objects.filter(q_objects)
    else:
        services = ServicesData.objects.all()
    page = request.GET.get('page', 1)
    paginator = Paginator(services, 2)
    try:
        services = paginator.page(page)
    except PageNotAnInteger:
        services = paginator.page(1)
    except EmptyPage:
        services = paginator.page(paginator.num_pages)
    return render(request, 'services.html',
              {'services': services, 'sub': sub, 'keyword':keyword})

答案应该是这样的

def servicesview(request):
    keyword = Db.objects.all().values_list('keyword', flat=True)
    sub = request.GET.get("search_key", "")
    q_objects = Q()
    if sub:
        q_objects.add(Q(subject_name__icontains=sub), Q.AND)
    if q_objects:
        services = ServicesData.objects.filter(q_objects)
    else:
        services = ServicesData.objects.all()
    page = request.GET.get('page', 1)
    paginator = Paginator(services, 2)
    try:
        services = paginator.page(page)
    except PageNotAnInteger:
        services = paginator.page(1)
    except EmptyPage:
        services = paginator.page(paginator.num_pages)
    return render(request, 'services.html',
              {'services': services, 'sub': sub, 'keyword':keyword})

请你检查一下……我更新了图片。看这里,我没有从我的模型中获取数据。我想根据我的主题持续时间进行筛选。你想只使用关键字进行筛选并选择选项吗?我为主题名称指定的搜索框,如果我在其中输入任何主题名称,它将进行搜索。我想在下拉菜单中输入持续时间,这样用户就可以在搜索框中输入主题名称,并从下拉菜单中选择可用时间。这意味着您只想搜索两个字段“主题名称”和“主题持续时间”?这是真的吗。然后我会编辑答案。正如你们所说,我编辑了答案,请让我知道它是否有效。将您的持续时间字段更改为数据库字段。请检查一下……我更新了图片。看这里,我没有从我的模型中获取数据。我想根据我的主题持续时间进行筛选。你想只使用关键字进行筛选并选择选项吗?我为主题名称指定的搜索框,如果我在其中输入任何主题名称,它将进行搜索。我想在下拉菜单中输入持续时间,这样用户就可以在搜索框中输入主题名称,并从下拉菜单中选择可用时间。这意味着您只想搜索两个字段“主题名称”和“主题持续时间”?这是真的吗。然后我会编辑答案。正如你们所说,我编辑了答案,请让我知道它是否有效。将您的持续时间字段更改为数据库字段。检查更新答案后,请在q_对象中添加您的数据库字段。添加(q(yourdatabasefield=search_key1),q和)它将永远不会呈现…首先必须在视图中获取模型字段,并且在为字段分配一个键后必须放入.html…我没有得到所需的内容,先生…在搜索后执行此操作,分页不起作用…过滤后总数据是否大于2?检查答案更新后,请添加数据库添加(q(yourdatabasefield=search_key1)、q和)它将永远不会呈现…首先必须在视图中获取模型字段,并且在为字段分配一个键后必须放入.html…我没有得到所需的内容,先生…在搜索后执行此操作,分页不起作用…在过滤后,总数据是否大于2?