Simplify and remove old code
This commit is contained in:
@@ -17,7 +17,7 @@ creator_singleton = SimpleLazyObject(lambda: CreatorSingleton.objects.get())
|
|||||||
|
|
||||||
|
|
||||||
def _as_choice_list(holders):
|
def _as_choice_list(holders):
|
||||||
return sorted([(AccessHolder.encapsulate(holder).gid, get_object_name(holder, display_object_type=False)) for holder in holders], key=lambda x: x[1])
|
return sorted([(AccessHolder.encapsulate(holder).gid, get_object_name(holder)) for holder in holders], key=lambda x: x[1])
|
||||||
|
|
||||||
|
|
||||||
class BaseHolderSelectionForm(forms.Form):
|
class BaseHolderSelectionForm(forms.Form):
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class CheckoutListView(DocumentListView):
|
|||||||
'title': _('Documents checked out'),
|
'title': _('Documents checked out'),
|
||||||
'hide_links': True,
|
'hide_links': True,
|
||||||
'extra_columns': [
|
'extra_columns': [
|
||||||
{'name': _('Checkout user'), 'attribute': encapsulate(lambda document: get_object_name(document.checkout_info().user_object, display_object_type=False))},
|
{'name': _('Checkout user'), 'attribute': encapsulate(lambda document: get_object_name(document.checkout_info().user_object))},
|
||||||
{'name': _('Checkout time and date'), 'attribute': encapsulate(lambda document: document.checkout_info().checkout_datetime)},
|
{'name': _('Checkout time and date'), 'attribute': encapsulate(lambda document: document.checkout_info().checkout_datetime)},
|
||||||
{'name': _('Checkout expiration'), 'attribute': encapsulate(lambda document: document.checkout_info().expiration_datetime)},
|
{'name': _('Checkout expiration'), 'attribute': encapsulate(lambda document: document.checkout_info().expiration_datetime)},
|
||||||
],
|
],
|
||||||
@@ -51,7 +51,7 @@ def checkout_info(request, document_pk):
|
|||||||
|
|
||||||
if document.is_checked_out():
|
if document.is_checked_out():
|
||||||
checkout_info = document.checkout_info()
|
checkout_info = document.checkout_info()
|
||||||
paragraphs.append(_('User: %s') % get_object_name(checkout_info.user_object, display_object_type=False))
|
paragraphs.append(_('User: %s') % get_object_name(checkout_info.user_object))
|
||||||
paragraphs.append(_('Check out time: %s') % checkout_info.checkout_datetime)
|
paragraphs.append(_('Check out time: %s') % checkout_info.checkout_datetime)
|
||||||
paragraphs.append(_('Check out expiration: %s') % checkout_info.expiration_datetime)
|
paragraphs.append(_('Check out expiration: %s') % checkout_info.expiration_datetime)
|
||||||
paragraphs.append(_('New versions allowed: %s') % (_('Yes') if not checkout_info.block_new_version else _('No')))
|
paragraphs.append(_('New versions allowed: %s') % (_('Yes') if not checkout_info.block_new_version else _('No')))
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ def parse_range(astr):
|
|||||||
return sorted(result)
|
return sorted(result)
|
||||||
|
|
||||||
|
|
||||||
def generate_choices_w_labels(choices, display_object_type=True):
|
def generate_choices_w_labels(choices):
|
||||||
results = []
|
results = []
|
||||||
for choice in choices:
|
for choice in choices:
|
||||||
ct = ContentType.objects.get_for_model(choice)
|
ct = ContentType.objects.get_for_model(choice)
|
||||||
@@ -139,32 +139,20 @@ def generate_choices_w_labels(choices, display_object_type=True):
|
|||||||
if isinstance(choice, User):
|
if isinstance(choice, User):
|
||||||
label = choice.get_full_name() if choice.get_full_name() else choice
|
label = choice.get_full_name() if choice.get_full_name() else choice
|
||||||
|
|
||||||
if display_object_type:
|
results.append(('%s,%s' % (ct.model, choice.pk), '%s' % (label)))
|
||||||
verbose_name = unicode(getattr(choice._meta, 'verbose_name', ct.name))
|
|
||||||
results.append(('%s,%s' % (ct.model, choice.pk), '%s: %s' % (verbose_name, label)))
|
|
||||||
else:
|
|
||||||
results.append(('%s,%s' % (ct.model, choice.pk), '%s' % (label)))
|
|
||||||
|
|
||||||
# Sort results by the label not the key value
|
# Sort results by the label not the key value
|
||||||
return sorted(results, key=lambda x: x[1])
|
return sorted(results, key=lambda x: x[1])
|
||||||
|
|
||||||
|
|
||||||
def get_object_name(obj, display_object_type=True):
|
def get_object_name(obj):
|
||||||
ct_label = ContentType.objects.get_for_model(obj).name
|
ct_label = ContentType.objects.get_for_model(obj).name
|
||||||
if isinstance(obj, User):
|
if isinstance(obj, User):
|
||||||
label = obj.get_full_name() if obj.get_full_name() else obj
|
label = obj.get_full_name() if obj.get_full_name() else obj
|
||||||
else:
|
else:
|
||||||
label = unicode(obj)
|
label = unicode(obj)
|
||||||
|
|
||||||
if display_object_type:
|
return '%s' % (label)
|
||||||
try:
|
|
||||||
verbose_name = unicode(obj._meta.verbose_name)
|
|
||||||
except AttributeError:
|
|
||||||
verbose_name = ct_label
|
|
||||||
|
|
||||||
return '%s: %s' % (verbose_name, label)
|
|
||||||
else:
|
|
||||||
return '%s' % (label)
|
|
||||||
|
|
||||||
|
|
||||||
def validate_path(path):
|
def validate_path(path):
|
||||||
@@ -252,9 +240,3 @@ def fs_cleanup(filename, suppress_exceptions=True):
|
|||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def get_obj_from_content_type_string(string):
|
|
||||||
model, pk = string.split(',')
|
|
||||||
ct = ContentType.objects.get(model=model)
|
|
||||||
return ct.get_object_for_this_type(pk=pk)
|
|
||||||
|
|||||||
@@ -32,7 +32,132 @@ from .mixins import (
|
|||||||
ExtraContextMixin, ObjectListPermissionFilterMixin,
|
ExtraContextMixin, ObjectListPermissionFilterMixin,
|
||||||
ObjectPermissionCheckMixin, RedirectionMixin, ViewPermissionCheckMixin
|
ObjectPermissionCheckMixin, RedirectionMixin, ViewPermissionCheckMixin
|
||||||
)
|
)
|
||||||
from .utils import get_obj_from_content_type_string
|
|
||||||
|
|
||||||
|
class AssignRemoveView(TemplateView):
|
||||||
|
left_list_title = None
|
||||||
|
right_list_title = None
|
||||||
|
decode_content_type = False
|
||||||
|
extra_context = None
|
||||||
|
grouped = False
|
||||||
|
|
||||||
|
LEFT_LIST_NAME = 'left_list'
|
||||||
|
RIGHT_LIST_NAME = 'right_list'
|
||||||
|
|
||||||
|
template_name = 'appearance/generic_form.html'
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_obj_from_content_type_string(string):
|
||||||
|
model, pk = string.split(',')
|
||||||
|
ct = ContentType.objects.get(model=model)
|
||||||
|
return ct.get_object_for_this_type(pk=pk)
|
||||||
|
|
||||||
|
def left_list(self):
|
||||||
|
# Subclass must override
|
||||||
|
return []
|
||||||
|
|
||||||
|
def right_list(self):
|
||||||
|
# Subclass must override
|
||||||
|
return []
|
||||||
|
|
||||||
|
def add(self, item):
|
||||||
|
# Subclass must override
|
||||||
|
pass
|
||||||
|
|
||||||
|
def remove(self, item):
|
||||||
|
# Subclass must override
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
self.unselected_list = ChoiceForm(prefix=self.LEFT_LIST_NAME, choices=self.left_list())
|
||||||
|
self.selected_list = ChoiceForm(prefix=self.RIGHT_LIST_NAME, choices=self.right_list())
|
||||||
|
return self.render_to_response(self.get_context_data())
|
||||||
|
|
||||||
|
def post(self, request, *args, **kwargs):
|
||||||
|
if '%s-submit' % self.LEFT_LIST_NAME in self.request.POST.keys():
|
||||||
|
self.unselected_list = ChoiceForm(
|
||||||
|
self.request.POST, prefix=self.LEFT_LIST_NAME,
|
||||||
|
choices=self.left_list()
|
||||||
|
)
|
||||||
|
if self.unselected_list.is_valid():
|
||||||
|
for selection in self.unselected_list.cleaned_data['selection']:
|
||||||
|
if self.grouped:
|
||||||
|
flat_list = []
|
||||||
|
for group in self.left_list():
|
||||||
|
flat_list.extend(group[1])
|
||||||
|
else:
|
||||||
|
flat_list = self.left_list()
|
||||||
|
|
||||||
|
label = dict(flat_list)[selection]
|
||||||
|
if self.decode_content_type:
|
||||||
|
selection_obj = AssignRemoveView.get_obj_from_content_type_string(selection)
|
||||||
|
else:
|
||||||
|
selection_obj = selection
|
||||||
|
try:
|
||||||
|
self.add(selection_obj)
|
||||||
|
except:
|
||||||
|
if settings.DEBUG:
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
messages.error(self.request, _('Unable to remove %(selection)s.') % {
|
||||||
|
'selection': label, 'right_list_title': self.right_list_title})
|
||||||
|
|
||||||
|
if '%s-submit' % self.RIGHT_LIST_NAME in self.request.POST.keys():
|
||||||
|
self.selected_list = ChoiceForm(
|
||||||
|
self.request.POST, prefix=self.RIGHT_LIST_NAME,
|
||||||
|
choices=self.right_list()
|
||||||
|
)
|
||||||
|
if self.selected_list.is_valid():
|
||||||
|
for selection in self.selected_list.cleaned_data['selection']:
|
||||||
|
if self.grouped:
|
||||||
|
flat_list = []
|
||||||
|
for group in self.right_list():
|
||||||
|
flat_list.extend(group[1])
|
||||||
|
else:
|
||||||
|
flat_list = self.right_list()
|
||||||
|
|
||||||
|
label = dict(flat_list)[selection]
|
||||||
|
if self.decode_content_type:
|
||||||
|
selection = AssignRemoveView.get_obj_from_content_type_string(selection)
|
||||||
|
try:
|
||||||
|
self.remove(selection)
|
||||||
|
except:
|
||||||
|
if settings.DEBUG:
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
messages.error(self.request, _('Unable to add %(selection)s.') % {
|
||||||
|
'selection': label, 'right_list_title': self.right_list_title})
|
||||||
|
|
||||||
|
return self.get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
data = super(AssignRemoveView, self).get_context_data(**kwargs)
|
||||||
|
data.update({
|
||||||
|
'subtemplates_list': [
|
||||||
|
{
|
||||||
|
'name': 'appearance/generic_form_subtemplate.html',
|
||||||
|
'column_class': 'col-xs-12 col-sm-6 col-md-6 col-lg-6',
|
||||||
|
'context': {
|
||||||
|
'form': self.unselected_list,
|
||||||
|
'title': self.left_list_title or ' ',
|
||||||
|
'submit_label': _('Add'),
|
||||||
|
'submit_icon': 'fa fa-plus'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'appearance/generic_form_subtemplate.html',
|
||||||
|
'column_class': 'col-xs-12 col-sm-6 col-md-6 col-lg-6',
|
||||||
|
'context': {
|
||||||
|
'form': self.selected_list,
|
||||||
|
'title': self.right_list_title or ' ',
|
||||||
|
'submit_label': _('Remove'),
|
||||||
|
'submit_icon': 'fa fa-minus'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
],
|
||||||
|
})
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
class AboutView(TemplateView):
|
class AboutView(TemplateView):
|
||||||
@@ -331,126 +456,6 @@ def multi_object_action_view(request):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class AssignRemoveView(TemplateView):
|
|
||||||
left_list_title = None
|
|
||||||
right_list_title = None
|
|
||||||
decode_content_type = False
|
|
||||||
extra_context = None
|
|
||||||
grouped = False
|
|
||||||
|
|
||||||
LEFT_LIST_NAME = 'left_list'
|
|
||||||
RIGHT_LIST_NAME = 'right_list'
|
|
||||||
|
|
||||||
template_name = 'appearance/generic_form.html'
|
|
||||||
|
|
||||||
def left_list(self):
|
|
||||||
# Subclass must override
|
|
||||||
return []
|
|
||||||
|
|
||||||
def right_list(self):
|
|
||||||
# Subclass must override
|
|
||||||
return []
|
|
||||||
|
|
||||||
def add(self, item):
|
|
||||||
# Subclass must override
|
|
||||||
pass
|
|
||||||
|
|
||||||
def remove(self, item):
|
|
||||||
# Subclass must override
|
|
||||||
pass
|
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
|
||||||
self.unselected_list = ChoiceForm(prefix=self.LEFT_LIST_NAME, choices=self.left_list())
|
|
||||||
self.selected_list = ChoiceForm(prefix=self.RIGHT_LIST_NAME, choices=self.right_list())
|
|
||||||
return self.render_to_response(self.get_context_data())
|
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
|
||||||
if '%s-submit' % self.LEFT_LIST_NAME in self.request.POST.keys():
|
|
||||||
self.unselected_list = ChoiceForm(
|
|
||||||
self.request.POST, prefix=self.LEFT_LIST_NAME,
|
|
||||||
choices=self.left_list()
|
|
||||||
)
|
|
||||||
if self.unselected_list.is_valid():
|
|
||||||
for selection in self.unselected_list.cleaned_data['selection']:
|
|
||||||
if self.grouped:
|
|
||||||
flat_list = []
|
|
||||||
for group in self.left_list():
|
|
||||||
flat_list.extend(group[1])
|
|
||||||
else:
|
|
||||||
flat_list = self.left_list()
|
|
||||||
|
|
||||||
label = dict(flat_list)[selection]
|
|
||||||
if self.decode_content_type:
|
|
||||||
selection_obj = get_obj_from_content_type_string(selection)
|
|
||||||
else:
|
|
||||||
selection_obj = selection
|
|
||||||
try:
|
|
||||||
self.add(selection_obj)
|
|
||||||
except:
|
|
||||||
if settings.DEBUG:
|
|
||||||
raise
|
|
||||||
else:
|
|
||||||
messages.error(self.request, _('Unable to remove %(selection)s.') % {
|
|
||||||
'selection': label, 'right_list_title': self.right_list_title})
|
|
||||||
|
|
||||||
if '%s-submit' % self.RIGHT_LIST_NAME in self.request.POST.keys():
|
|
||||||
self.selected_list = ChoiceForm(
|
|
||||||
self.request.POST, prefix=self.RIGHT_LIST_NAME,
|
|
||||||
choices=self.right_list()
|
|
||||||
)
|
|
||||||
if self.selected_list.is_valid():
|
|
||||||
for selection in self.selected_list.cleaned_data['selection']:
|
|
||||||
if self.grouped:
|
|
||||||
flat_list = []
|
|
||||||
for group in self.right_list():
|
|
||||||
flat_list.extend(group[1])
|
|
||||||
else:
|
|
||||||
flat_list = self.right_list()
|
|
||||||
|
|
||||||
label = dict(flat_list)[selection]
|
|
||||||
if self.decode_content_type:
|
|
||||||
selection = get_obj_from_content_type_string(selection)
|
|
||||||
try:
|
|
||||||
self.remove(selection)
|
|
||||||
except:
|
|
||||||
if settings.DEBUG:
|
|
||||||
raise
|
|
||||||
else:
|
|
||||||
messages.error(self.request, _('Unable to add %(selection)s.') % {
|
|
||||||
'selection': label, 'right_list_title': self.right_list_title})
|
|
||||||
|
|
||||||
return self.get(request, *args, **kwargs)
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
data = super(AssignRemoveView, self).get_context_data(**kwargs)
|
|
||||||
data.update({
|
|
||||||
'subtemplates_list': [
|
|
||||||
{
|
|
||||||
'name': 'appearance/generic_form_subtemplate.html',
|
|
||||||
'column_class': 'col-xs-12 col-sm-6 col-md-6 col-lg-6',
|
|
||||||
'context': {
|
|
||||||
'form': self.unselected_list,
|
|
||||||
'title': self.left_list_title or ' ',
|
|
||||||
'submit_label': _('Add'),
|
|
||||||
'submit_icon': 'fa fa-plus'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': 'appearance/generic_form_subtemplate.html',
|
|
||||||
'column_class': 'col-xs-12 col-sm-6 col-md-6 col-lg-6',
|
|
||||||
'context': {
|
|
||||||
'form': self.selected_list,
|
|
||||||
'title': self.right_list_title or ' ',
|
|
||||||
'submit_label': _('Remove'),
|
|
||||||
'submit_icon': 'fa fa-minus'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
],
|
|
||||||
})
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
def current_user_edit(request):
|
def current_user_edit(request):
|
||||||
"""
|
"""
|
||||||
Allow an user to edit his own details
|
Allow an user to edit his own details
|
||||||
|
|||||||
@@ -184,10 +184,10 @@ class SetupIndexDocumentTypesView(AssignRemoveView):
|
|||||||
return super(SetupIndexDocumentTypesView, self).dispatch(request, *args, **kwargs)
|
return super(SetupIndexDocumentTypesView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def left_list(self):
|
def left_list(self):
|
||||||
return generate_choices_w_labels(self.index.get_document_types_not_in_index(), display_object_type=False)
|
return generate_choices_w_labels(self.index.get_document_types_not_in_index())
|
||||||
|
|
||||||
def right_list(self):
|
def right_list(self):
|
||||||
return generate_choices_w_labels(self.index.document_types.all(), display_object_type=False)
|
return generate_choices_w_labels(self.index.document_types.all())
|
||||||
|
|
||||||
def remove(self, item):
|
def remove(self, item):
|
||||||
self.index.document_types.remove(item)
|
self.index.document_types.remove(item)
|
||||||
|
|||||||
@@ -48,10 +48,10 @@ class SetupSmartLinkDocumentTypesView(AssignRemoveView):
|
|||||||
return super(SetupSmartLinkDocumentTypesView, self).dispatch(request, *args, **kwargs)
|
return super(SetupSmartLinkDocumentTypesView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def left_list(self):
|
def left_list(self):
|
||||||
return generate_choices_w_labels(DocumentType.objects.exclude(pk__in=self.smart_link.document_types.all()), display_object_type=False)
|
return generate_choices_w_labels(DocumentType.objects.exclude(pk__in=self.smart_link.document_types.all()))
|
||||||
|
|
||||||
def right_list(self):
|
def right_list(self):
|
||||||
return generate_choices_w_labels(self.smart_link.document_types.all(), display_object_type=False)
|
return generate_choices_w_labels(self.smart_link.document_types.all())
|
||||||
|
|
||||||
def remove(self, item):
|
def remove(self, item):
|
||||||
self.smart_link.document_types.remove(item)
|
self.smart_link.document_types.remove(item)
|
||||||
|
|||||||
@@ -453,10 +453,10 @@ class SetupDocumentTypeMetadataOptionalView(AssignRemoveView):
|
|||||||
return super(SetupDocumentTypeMetadataOptionalView, self).dispatch(request, *args, **kwargs)
|
return super(SetupDocumentTypeMetadataOptionalView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def left_list(self):
|
def left_list(self):
|
||||||
return generate_choices_w_labels(set(MetadataType.objects.all()) - set(MetadataType.objects.filter(id__in=self.document_type.metadata.values_list('metadata_type', flat=True))), display_object_type=False)
|
return generate_choices_w_labels(set(MetadataType.objects.all()) - set(MetadataType.objects.filter(id__in=self.document_type.metadata.values_list('metadata_type', flat=True))))
|
||||||
|
|
||||||
def right_list(self):
|
def right_list(self):
|
||||||
return generate_choices_w_labels(self.document_type.metadata.filter(required=False), display_object_type=False)
|
return generate_choices_w_labels(self.document_type.metadata.filter(required=False))
|
||||||
|
|
||||||
def remove(self, item):
|
def remove(self, item):
|
||||||
item.delete()
|
item.delete()
|
||||||
@@ -477,7 +477,7 @@ class SetupDocumentTypeMetadataRequiredView(SetupDocumentTypeMetadataOptionalVie
|
|||||||
self.document_type.metadata.create(metadata_type=item, required=True)
|
self.document_type.metadata.create(metadata_type=item, required=True)
|
||||||
|
|
||||||
def right_list(self):
|
def right_list(self):
|
||||||
return generate_choices_w_labels(self.document_type.metadata.filter(required=True), display_object_type=False)
|
return generate_choices_w_labels(self.document_type.metadata.filter(required=True))
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
data = super(SetupDocumentTypeMetadataRequiredView, self).get_context_data(**kwargs)
|
data = super(SetupDocumentTypeMetadataRequiredView, self).get_context_data(**kwargs)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from .classes import Member
|
|||||||
|
|
||||||
|
|
||||||
def _as_choice_list(items):
|
def _as_choice_list(items):
|
||||||
return sorted([(Member.encapsulate(item).gid, get_object_name(item, display_object_type=False)) for item in items], key=lambda x: x[1])
|
return sorted([(Member.encapsulate(item).gid, get_object_name(item)) for item in items], key=lambda x: x[1])
|
||||||
|
|
||||||
|
|
||||||
def get_role_members(role, separate=False):
|
def get_role_members(role, separate=False):
|
||||||
|
|||||||
@@ -234,10 +234,10 @@ class UserGroupsView(AssignRemoveView):
|
|||||||
return super(UserGroupsView, self).dispatch(request, *args, **kwargs)
|
return super(UserGroupsView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def left_list(self):
|
def left_list(self):
|
||||||
return generate_choices_w_labels(get_user_non_groups(self.user), display_object_type=False)
|
return generate_choices_w_labels(get_user_non_groups(self.user))
|
||||||
|
|
||||||
def right_list(self):
|
def right_list(self):
|
||||||
return generate_choices_w_labels(get_user_groups(self.user), display_object_type=False)
|
return generate_choices_w_labels(get_user_groups(self.user))
|
||||||
|
|
||||||
def remove(self, item):
|
def remove(self, item):
|
||||||
item.user_set.remove(self.user)
|
item.user_set.remove(self.user)
|
||||||
@@ -373,10 +373,10 @@ class GroupMembersView(AssignRemoveView):
|
|||||||
return super(GroupMembersView, self).dispatch(request, *args, **kwargs)
|
return super(GroupMembersView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def left_list(self):
|
def left_list(self):
|
||||||
return generate_choices_w_labels(User.objects.exclude(groups=self.group).exclude(is_staff=True).exclude(is_superuser=True), display_object_type=False)
|
return generate_choices_w_labels(User.objects.exclude(groups=self.group).exclude(is_staff=True).exclude(is_superuser=True))
|
||||||
|
|
||||||
def right_list(self):
|
def right_list(self):
|
||||||
return generate_choices_w_labels(self.group.user_set.all(), display_object_type=False)
|
return generate_choices_w_labels(self.group.user_set.all())
|
||||||
|
|
||||||
def remove(self, item):
|
def remove(self, item):
|
||||||
self.group.user_set.remove(item)
|
self.group.user_set.remove(item)
|
||||||
|
|||||||
Reference in New Issue
Block a user