Merge pull request #1 from cluster-master/develop
functionality to add/change/filter form fields for admin post form
This commit is contained in:
commit
5863d7e343
4 changed files with 32 additions and 0 deletions
10
README.rst
10
README.rst
|
@ -351,6 +351,16 @@ Global Settings
|
||||||
used; (default: ``True``)
|
used; (default: ``True``)
|
||||||
* BLOG_DEFAULT_PUBLISHED: If posts are marked as published by default;
|
* BLOG_DEFAULT_PUBLISHED: If posts are marked as published by default;
|
||||||
(default: ``False``)
|
(default: ``False``)
|
||||||
|
* BLOG_ADMIN_POST_FIELDSET_FILTER: Callable function to change(add or filter)
|
||||||
|
fields to fieldsets for admin post edit form; (default: ``False``). Function simple example::
|
||||||
|
|
||||||
|
|
||||||
|
def fieldset_filter_function(fsets, request, obj=None):
|
||||||
|
if request.user.groups.filter(name='Editor').exists():
|
||||||
|
fsets[1][1]['fields'][0].append('author') # adding 'author' field if user is Editor
|
||||||
|
return fsets
|
||||||
|
|
||||||
|
|
||||||
* BLOG_AVAILABLE_PERMALINK_STYLES: Choices of permalinks styles;
|
* BLOG_AVAILABLE_PERMALINK_STYLES: Choices of permalinks styles;
|
||||||
* BLOG_PERMALINK_URLS: URLConf corresponding to
|
* BLOG_PERMALINK_URLS: URLConf corresponding to
|
||||||
BLOG_AVAILABLE_PERMALINK_STYLES;
|
BLOG_AVAILABLE_PERMALINK_STYLES;
|
||||||
|
|
|
@ -9,6 +9,7 @@ from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.utils.six import callable
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from parler.admin import TranslatableAdmin
|
from parler.admin import TranslatableAdmin
|
||||||
|
|
||||||
|
@ -108,6 +109,9 @@ class PostAdmin(PlaceholderAdminMixin, FrontendEditableAdminMixin,
|
||||||
fsets[1][1]['fields'][0].append('sites')
|
fsets[1][1]['fields'][0].append('sites')
|
||||||
if request.user.is_superuser:
|
if request.user.is_superuser:
|
||||||
fsets[1][1]['fields'][0].append('author')
|
fsets[1][1]['fields'][0].append('author')
|
||||||
|
filter_function = get_setting('ADMIN_POST_FIELDSET_FILTER')
|
||||||
|
if callable(filter_function):
|
||||||
|
fsets = filter_function(fsets, request, obj=obj)
|
||||||
return fsets
|
return fsets
|
||||||
|
|
||||||
def get_prepopulated_fields(self, request, obj=None):
|
def get_prepopulated_fields(self, request, obj=None):
|
||||||
|
|
|
@ -80,6 +80,8 @@ def get_setting(name):
|
||||||
'BLOG_MULTISITE': getattr(settings, 'BLOG_MULTISITE', True),
|
'BLOG_MULTISITE': getattr(settings, 'BLOG_MULTISITE', True),
|
||||||
'BLOG_AUTHOR_DEFAULT': getattr(settings, 'BLOG_AUTHOR_DEFAULT', True),
|
'BLOG_AUTHOR_DEFAULT': getattr(settings, 'BLOG_AUTHOR_DEFAULT', True),
|
||||||
'BLOG_DEFAULT_PUBLISHED': getattr(settings, 'BLOG_DEFAULT_PUBLISHED', False),
|
'BLOG_DEFAULT_PUBLISHED': getattr(settings, 'BLOG_DEFAULT_PUBLISHED', False),
|
||||||
|
'BLOG_ADMIN_POST_FIELDSET_FILTER': getattr(
|
||||||
|
settings, 'BLOG_ADMIN_POST_FIELDSET_FILTER', False),
|
||||||
'BLOG_AVAILABLE_PERMALINK_STYLES': getattr(
|
'BLOG_AVAILABLE_PERMALINK_STYLES': getattr(
|
||||||
settings, 'BLOG_AVAILABLE_PERMALINK_STYLES', PERMALINKS
|
settings, 'BLOG_AVAILABLE_PERMALINK_STYLES', PERMALINKS
|
||||||
),
|
),
|
||||||
|
|
|
@ -191,6 +191,22 @@ class AdminTest(BaseTest):
|
||||||
self.assertEqual(Post.objects.count(), 3)
|
self.assertEqual(Post.objects.count(), 3)
|
||||||
self.assertEqual(Post.objects.get(translations__slug='third-post').author.username, 'staff')
|
self.assertEqual(Post.objects.get(translations__slug='third-post').author.username, 'staff')
|
||||||
|
|
||||||
|
def test_admin_fieldsets_filter(self):
|
||||||
|
post_admin = admin.site._registry[Post]
|
||||||
|
request = self.get_page_request('/', self.user_normal, r'/en/blog/?app_config=%s' % self.app_config_1.pk)
|
||||||
|
|
||||||
|
fsets = post_admin.get_fieldsets(request)
|
||||||
|
self.assertFalse('author' in fsets[1][1]['fields'][0])
|
||||||
|
|
||||||
|
def filter_function(fs, request, obj=None):
|
||||||
|
if request.user == self.user_normal:
|
||||||
|
fs[1][1]['fields'][0].append('author')
|
||||||
|
return fs
|
||||||
|
|
||||||
|
with self.settings(BLOG_ADMIN_POST_FIELDSET_FILTER=filter_function):
|
||||||
|
fsets = post_admin.get_fieldsets(request)
|
||||||
|
self.assertTrue('author' in fsets[1][1]['fields'][0])
|
||||||
|
|
||||||
def test_admin_post_text(self):
|
def test_admin_post_text(self):
|
||||||
pages = self.get_pages()
|
pages = self.get_pages()
|
||||||
post = self._get_post(self._post_data[0]['en'])
|
post = self._get_post(self._post_data[0]['en'])
|
||||||
|
|
Loading…
Reference in a new issue