mirror of https://github.com/jumpserver/jumpserver
Modify pagination and Role model
parent
7789c8d13d
commit
e355c7b8ef
|
@ -2,6 +2,7 @@
|
|||
|
||||
from django import template
|
||||
from django.utils import timezone
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
register = template.Library()
|
||||
|
@ -18,3 +19,29 @@ def is_expired(datetime):
|
|||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
@register.filter
|
||||
def pagination_range(total_page, current_num=1, display=5):
|
||||
"""Return Page range
|
||||
|
||||
:param total_page: Total numbers of paginator
|
||||
:param current_num: current display page num
|
||||
:param display: Display as many as [:display:] page
|
||||
|
||||
In order to display many page num on web like:
|
||||
< 1 2 3 4 5 >
|
||||
"""
|
||||
try:
|
||||
current_num = int(current_num)
|
||||
except ValueError:
|
||||
current_num = 1
|
||||
|
||||
start = current_num - display/2 if current_num > display/2 else 1
|
||||
end = start + display if start + display <= total_page else total_page + 1
|
||||
|
||||
return range(start, end)
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -11,21 +11,32 @@ https://docs.djangoproject.com/en/1.10/ref/settings/
|
|||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
sys.path.append(os.path.dirname(BASE_DIR))
|
||||
|
||||
# Import project config setting
|
||||
try:
|
||||
from config import config as env_config, env
|
||||
CONFIG = env_config.get(env, 'default')()
|
||||
except ImportError:
|
||||
CONFIG = type('_', (), {'__getattr__': None})()
|
||||
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%xv'
|
||||
SECRET_KEY = CONFIG.SECRET_KEY or '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%x'
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
DEBUG = CONFIG.DEBUG or False
|
||||
|
||||
ALLOWED_HOSTS = []
|
||||
ALLOWED_HOSTS = CONFIG.ALLOWED_HOSTS or []
|
||||
|
||||
|
||||
# Application definition
|
||||
|
@ -80,12 +91,24 @@ WSGI_APPLICATION = 'jumpserver.wsgi.application'
|
|||
# Database
|
||||
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||
if CONFIG.DB_ENGINE == 'sqlite':
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': CONFIG.DB_NAME or os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||
}
|
||||
}
|
||||
else:
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.%s' % CONFIG.DB_ENGINE,
|
||||
'NAME': CONFIG.DB_NAME,
|
||||
'HOST': CONFIG.DB_HOST,
|
||||
'PORT': CONFIG.DB_PORT,
|
||||
'USER': CONFIG.DB_USERNAME,
|
||||
'PASSWORD': CONFIG.DB_PASSWORD,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Password validation
|
||||
|
@ -133,3 +156,5 @@ STATICFILES_DIRS = (
|
|||
AUTH_USER_MODEL = 'users.User'
|
||||
BOOTSTRAP_COLUMN_COUNT = 11
|
||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/') + '/'
|
||||
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
{% load common_tags %}
|
||||
{% if is_paginated %}
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
|
@ -9,17 +10,24 @@
|
|||
<div class="dataTables_paginate paging_simple_numbers" id="editable_paginate">
|
||||
<ul class="pagination" style="margin-top: 0; float: right">
|
||||
{% if page_obj.has_previous %}
|
||||
<li class="paginate_button previous" aria-controls="editable" tabindex="0"
|
||||
id="editable_previous">
|
||||
<a class="page" href="?page={{ page_obj.previous_page_number }}">Previous</a>
|
||||
<li class="paginate_button previous" aria-controls="editable" tabindex="0" id="previous">
|
||||
<a data-page="next" href="?page={{ page_obj.previous_page_number}}">‹</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li class="paginate_button active" aria-controls="editable" tabindex="0">
|
||||
<a class="page" href="?page={{ page_obj.number }}" title="第{{ page_obj.number }}页">{{ page_obj.number }}</a>
|
||||
</li>
|
||||
|
||||
{% for page in paginator.num_pages|pagination_range:page_obj.number %}
|
||||
{% if page == page_obj.number %}
|
||||
<li class="paginate_button active" aria-controls="editable" tabindex="0">
|
||||
{% else %}
|
||||
<li class="paginate_button" aria-controls="editable" tabindex="0">
|
||||
{% endif %}
|
||||
<a class="page" href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
||||
{% if page_obj.has_next %}
|
||||
<li class="paginate_button next" aria-controls="editable" tabindex="0" id="editable_next">
|
||||
<a class="page" href="?page={{ page_obj.next_page_number }}">Next</a>
|
||||
<li class="paginate_button next" aria-controls="editable" tabindex="0" id="next">
|
||||
<a data-page="next" href="?page={{ page_obj.next_page_number }}">›</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
from django.forms import ModelForm
|
||||
from django import forms
|
||||
|
||||
from .models import User, UserGroup
|
||||
from .models import User, UserGroup, Role
|
||||
|
||||
|
||||
class UserAddForm(ModelForm):
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import datetime
|
||||
|
||||
from django.db.models.signals import post_migrate
|
||||
from django.dispatch import receiver
|
||||
from django.utils import timezone
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import AbstractUser, Permission
|
||||
|
@ -18,6 +21,9 @@ class Role(AbstractGroup):
|
|||
class Meta:
|
||||
db_table = 'role'
|
||||
|
||||
def init(self):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def init(cls):
|
||||
roles = {
|
||||
|
|
|
@ -6,6 +6,7 @@ from django.db.models import Q
|
|||
from django.views.generic.list import ListView
|
||||
from django.views.generic.edit import CreateView, DeleteView, UpdateView
|
||||
from django.views.generic.detail import DetailView
|
||||
from django.conf import settings
|
||||
|
||||
from .models import User, UserGroup, Role
|
||||
from .forms import UserAddForm, UserUpdateForm, UserGroupForm
|
||||
|
@ -13,7 +14,7 @@ from .forms import UserAddForm, UserUpdateForm, UserGroupForm
|
|||
|
||||
class UserListView(ListView):
|
||||
model = User
|
||||
paginate_by = 20
|
||||
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
|
||||
context_object_name = 'user_list'
|
||||
template_name = 'users/user_list.html'
|
||||
ordering = '-date_joined'
|
||||
|
@ -39,7 +40,6 @@ class UserListView(ListView):
|
|||
class UserAddView(CreateView):
|
||||
model = User
|
||||
form_class = UserAddForm
|
||||
initial = {'role': Role.objects.get(name='User')}
|
||||
template_name = 'users/user_add.html'
|
||||
success_url = reverse_lazy('users:user-list')
|
||||
|
||||
|
|
33
hardcopy.0
33
hardcopy.0
|
@ -1,33 +0,0 @@
|
|||
58
|
||||
|
||||
/root/env2.7/lib/python2.7/site-packages/django/db/models/fields/__init__.pyc in get_prep_value(self, value)
|
||||
944 if value is None:
|
||||
945 return None
|
||||
--> 946 return int(value)
|
||||
947
|
||||
948 def contribute_to_class(self, cls, name, **kwargs):
|
||||
|
||||
TypeError: int() argument must be a string or a number, not 'QuerySet'
|
||||
|
||||
In [6]: group.user_set.update(users)
|
||||
---------------------------------------------------------------------------
|
||||
TypeError Traceback (most recent call last)
|
||||
<ipython-input-6-94520763e8e7> in <module>()
|
||||
----> 1 group.user_set.update(users)
|
||||
|
||||
/root/env2.7/lib/python2.7/site-packages/django/db/models/manager.pyc in manager_method(self, *args, **kwargs)
|
||||
83 def create_method(name, method):
|
||||
84 def manager_method(self, *args, **kwargs):
|
||||
---> 85 return getattr(self.get_queryset(), name)(*args, **kwargs)
|
||||
86 manager_method.__name__ = method.__name__
|
||||
87 manager_method.__doc__ = method.__doc__
|
||||
|
||||
TypeError: update() takes exactly 1 argument (2 given)
|
||||
|
||||
In [7]: users
|
||||
Out[7]: <QuerySet [<User: christina86>, <User: tina71>, <User: emily71>, <User: tammy66>, <User: sarah66>, <User: linda75>, <User: ev
|
||||
elyn88>, <User: mildred72>, <User: sharon93>, <User: christina88>, <User: heather80>, <User: amy80>, <User: julia81>, <User: sarah89>
|
||||
, <User: phillip74>, <User: kimberly74>, <User: ann73>, <User: helen63>, <User: joyce77>, <User: debra67>, '...(remaining elements tr
|
||||
uncated)...']>
|
||||
|
||||
In [8]: group.user_set
|
Loading…
Reference in New Issue