首页 > 解决方案 > Django 过滤器:使用分页器在用户和配置文件模型中搜索

问题描述

我正在尝试创建一个管理面板,管理员可以在其中通过用户名、名字、姓氏、邮政编码(来自配置文件模型)等搜索用户。由于某种原因,分页器可以工作,但是当我尝试使用 django 搜索时-过滤,没有任何反应。结果没有改变,我仍然看到所有用户的完整列表。

模型.py:

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
birthdate = models.DateField(null=True, blank=False, max_length=8)
phone_number = PhoneNumberField(null=True, blank=False, unique=True)

过滤器.py

import django_filters
from django_filters import CharFilter
from django.contrib.auth.models import User
from .models import *

class AdminUserFilters(django_filters.FilterSet):
    first_name_bitch = CharFilter(field_name='first_name', lookup_expr='icontains')
    # last_name = CharFilter(field_name='last_name', lookup_expr='icontains')
    # zip_code = User.profile.objects.filter(author__user__profile__screenname__icontains=w)
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email',)

视图.py

User_list = User.objects.all().order_by('username')
User_filter = AdminUserFilters(request.GET, queryset=User_list)

paginator = Paginator(User_filter.qs, 10)
page_num = request.GET.get('page', 1)

try:
    User_list = paginator.page(page_num)
except PageNotAnInteger:
    User_list = paginator.page(1)
except EmptyPage:
    User_list = paginator.page(paginator.num_pages)

context = {'User_list': User_list, 'User_filter':User_filter, 'paginator':paginator, 'page_num':page_num,}
return render(request, "admin/listusers.html", context)

列表用户.html

    {{ User_filter.form }}  
<br>
<button type="submit" type="button" style="height:40px; width:120px" class="btn btn-primary">Search</button>
<br><br>
{% for user in User_list %}
    <tr>
        <td><a href='/edit_user?edit_username={{ user.username }}'>{{ user.username }}</a></td>
        <td style="min-width: 110px">{{ user.date_joined}}</td>
        <td><a href='/add_household?username={{ user.username }}'>Edit Household</td>
        <td>{{ user.first_name }}</td>
        <td>{{ user.last_name }}</td>
        <td>{{ user.profile.birthdate }}</td>
        <td>{{ user.email }}</td>
        <td>{{ user.profile.phone_number }}</td>
        <td>{{ user.profile.zip_code }}</td>

    </tr>
    {% endfor %}
    </table>

    <p>
        <br>
    {% if User_list.has_previous %}
    <a href="/list_users?page={{ User_list.previous_page_number }}">Previous</a>
    {% endif %}

    {% if User_list.has_next %}
    <a href="/list_users?page={{ User_list.next_page_number }}">Next</a>
    {% endif %}
        <br><br>
    {% for pg in User_list.paginator.page_range %}
        {% if page_num|slugify != pg|slugify %}
        <input type="button" style="height:50px; width:40px;display: inline-block;" class="btn-primary" onclick="location.href='?page={{pg}}';" value="{{ pg }}" />
        {% endif %}
    {% endfor %}

标签: pythondjangodjango-filterpaginator

解决方案


推荐阅读