Skip to content
Snippets Groups Projects
Commit 3f8291b7 authored by Jiří Setnička's avatar Jiří Setnička
Browse files

Util: Vylepšený PagerForm

Ostatní formy z něj mohou dědit.
parent f21c1947
No related branches found
No related tags found
1 merge request!7Filtrování a provádění hromadných akcí na participants
...@@ -4,7 +4,6 @@ import werkzeug.exceptions ...@@ -4,7 +4,6 @@ import werkzeug.exceptions
import wtforms import wtforms
from sqlalchemy import or_ from sqlalchemy import or_
from typing import Optional
from wtforms import validators from wtforms import validators
from wtforms.validators import Required from wtforms.validators import Required
...@@ -15,13 +14,7 @@ import mo.rights ...@@ -15,13 +14,7 @@ import mo.rights
import mo.util import mo.util
import mo.users import mo.users
from mo.web import app from mo.web import app
from mo.web.util import PagerForm
class PagerForm(FlaskForm):
limit = wtforms.IntegerField()
offset = wtforms.IntegerField()
next = wtforms.SubmitField("Další")
previous = wtforms.SubmitField("Předchozí")
class UsersFilterForm(PagerForm): class UsersFilterForm(PagerForm):
...@@ -104,20 +97,7 @@ def org_users(): ...@@ -104,20 +97,7 @@ def org_users():
q = q.filter(db.User.user_id.in_(participation_filter)) q = q.filter(db.User.user_id.in_(participation_filter))
# print(str(q)) # print(str(q))
count = q.count() (count, q) = filter.apply_limits(q, pagesize=50)
if not filter.offset.data:
filter.offset.data = 0
if not filter.limit.data:
filter.limit.data = 50
if filter.previous.data:
filter.offset.data = max(0, filter.offset.data - 50)
if filter.next.data:
filter.offset.data = min(count // 50 * 50, filter.offset.data + 50)
q = q.offset(filter.offset.data)
q = q.limit(filter.limit.data)
users = q.all() users = q.all()
return render_template( return render_template(
......
from flask_wtf import FlaskForm
import wtforms
from sqlalchemy.orm.query import Query
class PagerForm(FlaskForm):
limit = wtforms.IntegerField()
offset = wtforms.IntegerField()
next = wtforms.SubmitField("Další")
previous = wtforms.SubmitField("Předchozí")
def apply_limits(self, query: Query, pagesize: int = 50) -> (int, Query):
count = query.count()
if not self.offset.data:
self.offset.data = 0
if not self.limit.data:
self.limit.data = pagesize
if self.previous.data:
self.offset.data = max(0, self.offset.data - pagesize)
if self.next.data:
self.offset.data = min(count // pagesize * pagesize, self.offset.data + pagesize)
query = query.offset(self.offset.data)
query = query.limit(self.limit.data)
return (count, query)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment