diff --git a/mayan/apps/common/forms.py b/mayan/apps/common/forms.py index 2e144d504f..039f016edb 100644 --- a/mayan/apps/common/forms.py +++ b/mayan/apps/common/forms.py @@ -4,7 +4,7 @@ import os from django import forms from django.conf import settings -from django.contrib.auth.models import User +from django.contrib.auth import get_user_model from django.db import models from django.utils.html import escape from django.utils.translation import ugettext_lazy as _ @@ -148,7 +148,7 @@ class UserForm(forms.ModelForm): """ class Meta: - model = User + model = get_user_model() fields = ('username', 'first_name', 'last_name', 'email') @@ -158,7 +158,7 @@ class UserForm_view(DetailForm): """ class Meta: - model = User + model = get_user_model() fields = ( 'username', 'first_name', 'last_name', 'email', 'is_staff', 'is_superuser', 'last_login', 'date_joined', 'groups' diff --git a/mayan/apps/common/generics.py b/mayan/apps/common/generics.py index 85b5912b6c..c7cd02129f 100644 --- a/mayan/apps/common/generics.py +++ b/mayan/apps/common/generics.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals from django.conf import settings from django.contrib import messages -from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType from django.http import HttpResponseRedirect from django.utils.translation import ugettext_lazy as _ @@ -43,10 +42,7 @@ class AssignRemoveView(ExtraContextMixin, ViewPermissionCheckMixin, ObjectPermis results = [] for choice in choices: ct = ContentType.objects.get_for_model(choice) - if isinstance(choice, User): - label = choice.get_full_name() if choice.get_full_name() else choice - else: - label = unicode(choice) + label = unicode(choice) results.append(('%s,%s' % (ct.model, choice.pk), '%s' % (label))) diff --git a/mayan/apps/document_states/models.py b/mayan/apps/document_states/models.py index f4035ed846..09fc7cf345 100644 --- a/mayan/apps/document_states/models.py +++ b/mayan/apps/document_states/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import logging -from django.contrib.auth.models import User +from django.conf import settings from django.core.urlresolvers import reverse from django.db import IntegrityError, models from django.utils.encoding import python_2_unicode_compatible @@ -186,7 +186,7 @@ class WorkflowInstanceLogEntry(models.Model): transition = models.ForeignKey( WorkflowTransition, verbose_name=_('Transition') ) - user = models.ForeignKey(User, verbose_name=_('User')) + user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('User')) comment = models.TextField(blank=True, verbose_name=_('Comment')) def __str__(self): diff --git a/mayan/apps/documents/models.py b/mayan/apps/documents/models.py index c671b0d733..782713c4e8 100644 --- a/mayan/apps/documents/models.py +++ b/mayan/apps/documents/models.py @@ -5,7 +5,7 @@ import hashlib import logging import uuid -from django.contrib.auth.models import User +from django.conf import settings from django.core.exceptions import PermissionDenied from django.core.files import File from django.core.urlresolvers import reverse @@ -799,7 +799,7 @@ class RecentDocument(models.Model): a given user """ user = models.ForeignKey( - User, db_index=True, editable=False, verbose_name=_('User') + settings.AUTH_USER_MODEL, db_index=True, editable=False, verbose_name=_('User') ) document = models.ForeignKey( Document, editable=False, verbose_name=_('Document') @@ -815,7 +815,7 @@ class RecentDocument(models.Model): def natural_key(self): return self.document.natural_key() + self.user.natural_key() - natural_key.dependencies = ['documents.Document', 'auth.User'] + natural_key.dependencies = ['documents.Document', settings.AUTH_USER_MODEL] class Meta: ordering = ('-datetime_accessed',) diff --git a/mayan/apps/dynamic_search/models.py b/mayan/apps/dynamic_search/models.py index 9afc0c97dc..b3ee98b156 100644 --- a/mayan/apps/dynamic_search/models.py +++ b/mayan/apps/dynamic_search/models.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import urllib import urlparse -from django.contrib.auth.models import User +from django.conf import settings from django.core.urlresolvers import reverse from django.db import models from django.utils.encoding import ( @@ -20,7 +20,9 @@ class RecentSearch(models.Model): Keeps a list of the [n] most recent search keywords for a given user """ - user = models.ForeignKey(User, editable=False, verbose_name=_('User')) + user = models.ForeignKey( + settings.AUTH_USER_MODEL, editable=False, verbose_name=_('User') + ) query = models.TextField(editable=False, verbose_name=_('Query')) datetime_created = models.DateTimeField( auto_now=True, db_index=True, verbose_name=_('Datetime created') diff --git a/mayan/apps/folders/serializers.py b/mayan/apps/folders/serializers.py index e3e5a39f33..554cc10c09 100644 --- a/mayan/apps/folders/serializers.py +++ b/mayan/apps/folders/serializers.py @@ -8,7 +8,6 @@ from django.utils.translation import ugettext_lazy as _ from documents.models import Document from documents.serializers import DocumentSerializer -from user_management.serializers import UserSerializer from .models import Folder diff --git a/mayan/apps/tags/forms.py b/mayan/apps/tags/forms.py index 711b29620b..b71631c11d 100644 --- a/mayan/apps/tags/forms.py +++ b/mayan/apps/tags/forms.py @@ -50,6 +50,6 @@ class TagMultipleSelectionForm(forms.Form): self.fields['tags'] = forms.MultipleChoiceField( label=_('Tags'), choices=queryset.values_list('id', 'label'), - help_text=_('Tags to attach to the document.'),required=False, + help_text=_('Tags to attach to the document.'), required=False, widget=forms.CheckboxSelectMultiple ) diff --git a/mayan/apps/user_management/apps.py b/mayan/apps/user_management/apps.py index 3de140ccd9..b01334daa4 100644 --- a/mayan/apps/user_management/apps.py +++ b/mayan/apps/user_management/apps.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals from django.contrib.auth import get_user_model -from django.contrib.auth.models import User, Group +from django.contrib.auth.models import Group from django.utils.translation import ugettext_lazy as _ from actstream import registry @@ -31,6 +31,8 @@ class UserManagementApp(MayanAppConfig): def ready(self): super(UserManagementApp, self).ready() + User = get_user_model() + APIEndPoint(app=self, version_string='1') MetadataLookup( @@ -39,7 +41,7 @@ class UserManagementApp(MayanAppConfig): ) MetadataLookup( description=_('All the users.'), name='users', - value=get_user_model().objects.all() + value=User.objects.all() ) SourceColumn( diff --git a/mayan/apps/user_management/forms.py b/mayan/apps/user_management/forms.py index 9b1eff1a2e..96c85303df 100644 --- a/mayan/apps/user_management/forms.py +++ b/mayan/apps/user_management/forms.py @@ -1,13 +1,13 @@ from __future__ import unicode_literals from django import forms -from django.contrib.auth.models import User +from django.contrib.auth import get_user_model from django.utils.translation import ugettext_lazy as _ class UserForm(forms.ModelForm): class Meta: - model = User + model = get_user_model() fields = ('username', 'first_name', 'last_name', 'email', 'is_active',) diff --git a/mayan/apps/user_management/serializers.py b/mayan/apps/user_management/serializers.py index fb6cc90cf9..74a116aca4 100644 --- a/mayan/apps/user_management/serializers.py +++ b/mayan/apps/user_management/serializers.py @@ -1,6 +1,7 @@ from __future__ import unicode_literals -from django.contrib.auth.models import Group, User +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Group from rest_framework import serializers @@ -31,7 +32,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer): 'is_active', 'is_superuser', 'last_login', 'last_name', 'password', 'url', 'username', ) - model = User + model = get_user_model() read_only_fields = ('last_login', 'date_joined') write_only_fields = ('password',) diff --git a/mayan/apps/user_management/views.py b/mayan/apps/user_management/views.py index d90cad59ac..8945375e81 100644 --- a/mayan/apps/user_management/views.py +++ b/mayan/apps/user_management/views.py @@ -4,6 +4,7 @@ from django.conf import settings from django.contrib import messages from django.contrib.auth import get_user_model from django.contrib.auth.models import Group +from django.contrib.contenttypes.models import ContentType from django.core.urlresolvers import reverse, reverse_lazy from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404, render_to_response @@ -72,6 +73,18 @@ class GroupMembersView(AssignRemoveView): right_list_title = _('Members of groups') view_permission = permission_group_edit + @staticmethod + def generate_choices(choices): + results = [] + for choice in choices: + ct = ContentType.objects.get_for_model(choice) + label = choice.get_full_name() if choice.get_full_name() else choice + + results.append(('%s,%s' % (ct.model, choice.pk), '%s' % (label))) + + # Sort results by the label not the key value + return sorted(results, key=lambda x: x[1]) + def add(self, item): self.get_object().user_set.add(item) @@ -85,14 +98,14 @@ class GroupMembersView(AssignRemoveView): return get_object_or_404(Group, pk=self.kwargs['pk']) def left_list(self): - return AssignRemoveView.generate_choices( + return GroupMembersView.generate_choices( get_user_model().objects.exclude( groups=self.get_object() ).exclude(is_staff=True).exclude(is_superuser=True) ) def right_list(self): - return AssignRemoveView.generate_choices( + return GroupMembersView.generate_choices( self.get_object().user_set.all() )