Skip to content

Commit 9277f5c

Browse files
committed
Added Searching Sorting and Pagination Features
1 parent 1816dc8 commit 9277f5c

File tree

8 files changed

+238
-0
lines changed

8 files changed

+238
-0
lines changed

DjangoEcommerceApp/AdminViews.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from django.contrib.messages.views import messages
88
from django.urls import reverse
99
from django.http import HttpResponseRedirect
10+
from django.db.models import Q
1011

1112
@login_required(login_url="/admin/")
1213
def admin_home(request):
@@ -15,6 +16,25 @@ def admin_home(request):
1516
class CategoriesListView(ListView):
1617
model=Categories
1718
template_name="admin_templates/category_list.html"
19+
paginate_by=3
20+
21+
def get_queryset(self):
22+
filter_val=self.request.GET.get("filter","")
23+
order_by=self.request.GET.get("orderby","id")
24+
if filter_val!="":
25+
cat=Categories.objects.filter(Q(title__contains=filter_val) | Q(description__contains=filter_val)).order_by(order_by)
26+
else:
27+
cat=Categories.objects.all().order_by(order_by)
28+
29+
return cat
30+
31+
def get_context_data(self,**kwargs):
32+
context=super(CategoriesListView,self).get_context_data(**kwargs)
33+
context["filter"]=self.request.GET.get("filter","")
34+
context["orderby"]=self.request.GET.get("orderby","id")
35+
context["all_table_fields"]=Categories._meta.get_fields()
36+
return context
37+
1838

1939
class CategoriesCreate(SuccessMessageMixin,CreateView):
2040
model=Categories
@@ -32,6 +52,25 @@ class CategoriesUpdate(SuccessMessageMixin,UpdateView):
3252
class SubCategoriesListView(ListView):
3353
model=SubCategories
3454
template_name="admin_templates/sub_category_list.html"
55+
paginate_by=3
56+
57+
def get_queryset(self):
58+
filter_val=self.request.GET.get("filter","")
59+
order_by=self.request.GET.get("orderby","id")
60+
if filter_val!="":
61+
cat=SubCategories.objects.filter(Q(title__contains=filter_val) | Q(description__contains=filter_val)).order_by(order_by)
62+
else:
63+
cat=SubCategories.objects.all().order_by(order_by)
64+
65+
return cat
66+
67+
def get_context_data(self,**kwargs):
68+
context=super(SubCategoriesListView,self).get_context_data(**kwargs)
69+
context["filter"]=self.request.GET.get("filter","")
70+
context["orderby"]=self.request.GET.get("orderby","id")
71+
context["all_table_fields"]=SubCategories._meta.get_fields()
72+
return context
73+
3574

3675
class SubCategoriesCreate(SuccessMessageMixin,CreateView):
3776
model=SubCategories
@@ -48,6 +87,25 @@ class SubCategoriesUpdate(SuccessMessageMixin,UpdateView):
4887
class MerchantUserListView(ListView):
4988
model=MerchantUser
5089
template_name="admin_templates/merchant_list.html"
90+
paginate_by=3
91+
92+
def get_queryset(self):
93+
filter_val=self.request.GET.get("filter","")
94+
order_by=self.request.GET.get("orderby","id")
95+
if filter_val!="":
96+
cat=MerchantUser.objects.filter(Q(auth_user_id__first_name__contains=filter_val) |Q(auth_user_id__last_name__contains=filter_val) | Q(auth_user_id__email__contains=filter_val) | Q(auth_user_id__username__contains=filter_val)).order_by(order_by)
97+
else:
98+
cat=MerchantUser.objects.all().order_by(order_by)
99+
100+
return cat
101+
102+
def get_context_data(self,**kwargs):
103+
context=super(MerchantUserListView,self).get_context_data(**kwargs)
104+
context["filter"]=self.request.GET.get("filter","")
105+
context["orderby"]=self.request.GET.get("orderby","id")
106+
context["all_table_fields"]=MerchantUser._meta.get_fields()
107+
return context
108+
51109

52110
class MerchantUserCreateView(SuccessMessageMixin,CreateView):
53111
template_name="admin_templates/merchant_create.html"
Binary file not shown.

DjangoEcommerceApp/templates/admin_templates/category_list.html

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,37 @@
1212
{% endblock page_title %}
1313

1414
{% block page_content %}
15+
<div class="row">
16+
<div class="col-lg-12">
17+
<div class="search-element">
18+
<div class="card">
19+
20+
<div class="card-body">
21+
<form method="get">
22+
<button class="btn btn-primary" type="submit" style="float:right"><i class="fas fa-search"></i> Search</button>
23+
<input class="form-control" type="search" placeholder="Search" aria-label="Search" data-width="250" style="width: 250px;float:right" name="filter" value="{{ filter }}">
24+
</form>
25+
</div>
26+
27+
</div>
28+
</div>
29+
</div>
30+
</div>
31+
<div class="row">
32+
<div class="col-lg-12">
33+
<div class="search-element">
34+
<div class="card">
35+
36+
<div class="card-body">
37+
<b>Sort By : - </b>
38+
<a href="{% url 'category_list' %}?filter={{ filter }}&orderby=id">ID</a> |
39+
<a href="{% url 'category_list' %}?filter={{ filter }}&orderby=title">Title</a> |
40+
<a href="{% url 'category_list' %}?filter={{ filter }}&orderby=description">Description</a>
41+
</div>
42+
</div>
43+
</div>
44+
</div>
45+
</div>
1546
<div class="row">
1647
{% for category in categories_list %}
1748
<div class="col-12 col-sm-6 col-md-6 col-lg-3">
@@ -39,6 +70,33 @@
3970
</div>
4071
{% endfor %}
4172
</div>
73+
<div class="row">
74+
<div class="col-lg-12">
75+
<div class="card">
76+
77+
<div class="card-body">
78+
<nav aria-label="Page navigation example">
79+
<ul class="pagination">
80+
{% if page_obj.has_previous %}
81+
<li class="page-item"><a class="page-link" href="{% url 'category_list' %}?filter={{ filter }}&orderby={{ orderby }}&page={{ page_obj.previous_page_number }}">Previous</a></li>
82+
{% else %}
83+
<li class="page-item disabled"><a class="page-link" href="#">Previous</a></li>
84+
{% endif %}
85+
{% for i in paginator.page_range %}
86+
<li class="page-item {% if i == page_obj.number %}active{% endif %}"><a class="page-link" href="{% url 'category_list' %}?filter={{ filter }}&orderby={{ orderby }}&page={{ i }}">{{ i }}</a></li>
87+
{% endfor %}
88+
{% if page_obj.has_next %}
89+
<li class="page-item"><a class="page-link" href="{% url 'category_list' %}?filter={{ filter }}&orderby={{ orderby }}&page={{ page_obj.next_page_number }}">Next</a></li>
90+
{% else %}
91+
<li class="page-item disabled"><a class="page-link" href="#">Next</a></li>
92+
{% endif %}
93+
94+
</ul>
95+
</nav>
96+
</div>
97+
</div>
98+
</div>
99+
</div>>
42100
{% endblock page_content %}
43101

44102

DjangoEcommerceApp/templates/admin_templates/merchant_list.html

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,39 @@
1212
{% endblock page_title %}
1313

1414
{% block page_content %}
15+
<div class="row">
16+
<div class="col-lg-12">
17+
<div class="search-element">
18+
<div class="card">
19+
20+
<div class="card-body">
21+
<form method="get">
22+
<button class="btn btn-primary" type="submit" style="float:right"><i class="fas fa-search"></i> Search</button>
23+
<input class="form-control" type="search" placeholder="Search" aria-label="Search" data-width="250" style="width: 250px;float:right" name="filter" value="{{ filter }}">
24+
</form>
25+
</div>
26+
27+
</div>
28+
</div>
29+
</div>
30+
</div>
31+
<div class="row">
32+
<div class="col-lg-12">
33+
<div class="search-element">
34+
<div class="card">
35+
36+
<div class="card-body">
37+
<b>Sort By : - </b>
38+
<a href="{% url 'merchant_list' %}?filter={{ filter }}&orderby=id">ID</a> |
39+
<a href="{% url 'merchant_list' %}?filter={{ filter }}&orderby=created_at">Newest</a> |
40+
<a href="{% url 'merchant_list' %}?filter={{ filter }}&orderby=company_name">Company</a> |
41+
<a href="{% url 'merchant_list' %}?filter={{ filter }}&orderby=created_at">Newest</a> |
42+
<a href="{% url 'merchant_list' %}?filter={{ filter }}&orderby=auth_user_id__username">Username</a> |
43+
</div>
44+
</div>
45+
</div>
46+
</div>
47+
</div>
1548
<div class="row">
1649
{% for merchantuser in merchantuser_list %}
1750
<div class="col-12 col-sm-6 col-md-6 col-lg-3">
@@ -43,6 +76,33 @@
4376
</div>
4477
{% endfor %}
4578
</div>
79+
<div class="row">
80+
<div class="col-lg-12">
81+
<div class="card">
82+
83+
<div class="card-body">
84+
<nav aria-label="Page navigation example">
85+
<ul class="pagination">
86+
{% if page_obj.has_previous %}
87+
<li class="page-item"><a class="page-link" href="{% url 'merchant_list' %}?filter={{ filter }}&orderby={{ orderby }}&page={{ page_obj.previous_page_number }}">Previous</a></li>
88+
{% else %}
89+
<li class="page-item disabled"><a class="page-link" href="#">Previous</a></li>
90+
{% endif %}
91+
{% for i in paginator.page_range %}
92+
<li class="page-item {% if i == page_obj.number %}active{% endif %}"><a class="page-link" href="{% url 'merchant_list' %}?filter={{ filter }}&orderby={{ orderby }}&page={{ i }}">{{ i }}</a></li>
93+
{% endfor %}
94+
{% if page_obj.has_next %}
95+
<li class="page-item"><a class="page-link" href="{% url 'merchant_list' %}?filter={{ filter }}&orderby={{ orderby }}&page={{ page_obj.next_page_number }}">Next</a></li>
96+
{% else %}
97+
<li class="page-item disabled"><a class="page-link" href="#">Next</a></li>
98+
{% endif %}
99+
100+
</ul>
101+
</nav>
102+
</div>
103+
</div>
104+
</div>
105+
</div>
46106
{% endblock page_content %}
47107

48108

DjangoEcommerceApp/templates/admin_templates/sub_category_list.html

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,37 @@
1212
{% endblock page_title %}
1313

1414
{% block page_content %}
15+
<div class="row">
16+
<div class="col-lg-12">
17+
<div class="search-element">
18+
<div class="card">
19+
20+
<div class="card-body">
21+
<form method="get">
22+
<button class="btn btn-primary" type="submit" style="float:right"><i class="fas fa-search"></i> Search</button>
23+
<input class="form-control" type="search" placeholder="Search" aria-label="Search" data-width="250" style="width: 250px;float:right" name="filter" value="{{ filter }}">
24+
</form>
25+
</div>
26+
27+
</div>
28+
</div>
29+
</div>
30+
</div>
31+
<div class="row">
32+
<div class="col-lg-12">
33+
<div class="search-element">
34+
<div class="card">
35+
36+
<div class="card-body">
37+
<b>Sort By : - </b>
38+
<a href="{% url 'sub_category_list' %}?filter={{ filter }}&orderby=id">ID</a> |
39+
<a href="{% url 'sub_category_list' %}?filter={{ filter }}&orderby=title">Title</a> |
40+
<a href="{% url 'sub_category_list' %}?filter={{ filter }}&orderby=description">Description</a>
41+
</div>
42+
</div>
43+
</div>
44+
</div>
45+
</div>
1546
<div class="row">
1647
{% for subcategory in subcategories_list %}
1748
<div class="col-12 col-sm-6 col-md-6 col-lg-3">
@@ -40,6 +71,34 @@
4071
</div>
4172
{% endfor %}
4273
</div>
74+
<div class="row">
75+
<div class="col-lg-12">
76+
<div class="card">
77+
78+
<div class="card-body">
79+
<nav aria-label="Page navigation example">
80+
<ul class="pagination">
81+
{% if page_obj.has_previous %}
82+
<li class="page-item"><a class="page-link" href="{% url 'sub_category_list' %}?filter={{ filter }}&orderby={{ orderby }}&page={{ page_obj.previous_page_number }}">Previous</a></li>
83+
{% else %}
84+
<li class="page-item disabled"><a class="page-link" href="#">Previous</a></li>
85+
{% endif %}
86+
{% for i in paginator.page_range %}
87+
<li class="page-item {% if i == page_obj.number %}active{% endif %}"><a class="page-link" href="{% url 'sub_category_list' %}?filter={{ filter }}&orderby={{ orderby }}&page={{ i }}">{{ i }}</a></li>
88+
{% endfor %}
89+
{% if page_obj.has_next %}
90+
<li class="page-item"><a class="page-link" href="{% url 'sub_category_list' %}?filter={{ filter }}&orderby={{ orderby }}&page={{ page_obj.next_page_number }}">Next</a></li>
91+
{% else %}
92+
<li class="page-item disabled"><a class="page-link" href="#">Next</a></li>
93+
{% endif %}
94+
95+
</ul>
96+
</nav>
97+
</div>
98+
</div>
99+
</div>
100+
</div>
101+
43102
{% endblock page_content %}
44103

45104

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,6 @@
4444
## Added Admin Merchant List Page
4545
<img src="screenshots/merchant_list.PNG" style="width:100%" alt="category"/>
4646

47+
## Added Searching Sorting and Pagination Features
48+
<img src="screenshots/category_searching.PNG" style="width:100%" alt="category"/>
49+

db.sqlite3

0 Bytes
Binary file not shown.

screenshots/category_searching.PNG

580 KB
Loading

0 commit comments

Comments
 (0)