Modify pagination and Role model

pull/530/head
ibuler 2016-08-20 18:33:18 +08:00
parent 7789c8d13d
commit e355c7b8ef
7 changed files with 85 additions and 52 deletions

View File

@ -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)

View File

@ -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('\\', '/') + '/'

View File

@ -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>

View File

@ -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):

View File

@ -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 = {

View File

@ -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')

View File

@ -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