Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from .models import UserModel, UserProfileModel
- from django import forms
- from django.contrib import admin
- from django.contrib.auth.models import Group
- from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
- from django.contrib.auth.forms import ReadOnlyPasswordHashField
- class UserCreationForm(forms.ModelForm):
- password = forms.CharField(label='Password',widget=forms.PasswordInput)
- passwordrepeat = forms.CharField(label='Confirm Password',widget=forms.PasswordInput)
- class Meta:
- model = UserModel
- fields = ('email',)
- def clean_password(self):
- # Check that the two password entries match
- password = self.cleaned_data.get('password')
- passwordrepeat = self.cleaned_data.get('passwordrepeat')
- if password and passwordrepeat and password != passwordrepeat:
- raise forms.ValidationError("Passwords do not match")
- return passwordrepeat
- def save(self, commit=True):
- # Save the provided password in hashed format
- user = super(UserCreationForm, self).save(commit=False)
- user.set_password(self.clean_password['password'])
- if commit:
- user.save()
- return user
- class UserUpdateForm(forms.ModelForm):
- password = ReadOnlyPasswordHashField()
- class Meta:
- model = UserModel
- fields = ('email','password','is_active','is_admin')
- def clean_password(self):
- # Regardless of what the user provides, return the initial value.
- # This is done here, rather than on the field, because the
- # field does not have access to the initial value
- return self.initial['password']
- class UserProfileInline(admin.StackedInline):
- model = UserProfileModel
- fields = ('user_fname','user_lname','user_type',)
- can_delete = False
- verbose_name_plural = 'Profile'
- fk_name = 'user'
- class UserAdmin(BaseUserAdmin):
- # The forms to add and change user instances
- update_form = UserUpdateForm
- create_form = UserCreationForm
- # The fields to be used in displaying UserModel.
- # These override the definitions on the base UserAdmin
- # that reference specific fields on auth.User.
- list_display = ('email','dt_joined','dt_updated','is_active','is_admin')
- list_filter = ('is_admin','dt_joined','dt_updated','is_active')
- fieldsets = (
- (None, {'fields': ('email','password',)}),
- ('Permissions', {'fields':('is_admin','is_active')}),
- )
- inlines = (UserProfileInline, )
- # add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
- # overrides get_fieldsets to use this attribute when creating a user.
- add_fieldsets = (
- (None, {
- 'classes':('wide',),
- 'fields':('email','password','is_admin','is_superadmin','is_active')
- }
- ),
- )
- search_fields = ('email',)
- ordering = ('email',)
- filter_horizontal = ()
- def get_inline_instances(self, request, obj=None):
- if not obj:
- return list()
- return super(UserAdmin, self).get_inline_instances(request, obj)
- admin.site.register(UserModel, UserAdmin)
- admin.site.unregister(Group)
- # User Manager and User Model
- class UserManager(BaseUserManager):
- class Meta:
- verbose_name = 'Manager'
- def create_user(self,email,password=None):
- if not email:
- raise ValueError('Users must have an email address')
- user = self.model(email=self.normalize_email(email))
- user.set_password(password)
- user.save(using=self._db)
- return user
- def create_adminuser(self,email,password):
- user = self.create_user(email,password=password)
- user.is_admin = True
- user.is_superadmin = False
- user.save(using=self._db)
- return user
- def create_superuser(self,email,password):
- user = self.create_user(email,password=password)
- user.is_admin = True
- user.is_superadmin = True
- user.save(using=self._db)
- return user
- class UserModel(AbstractBaseUser): # For the Company Employees
- id=models.AutoField(primary_key=True) # Have set this explicitly for clarity purposes
- email=models.EmailField(max_length=255,unique=True,verbose_name='Email Address')
- dt_joined=models.DateTimeField(auto_now_add=True,verbose_name='Date Joined')
- dt_updated=models.DateTimeField(auto_now=True,verbose_name='Date Updated')
- is_active=models.BooleanField(default=True)
- is_admin=models.BooleanField(default=False)
- is_superadmin=models.BooleanField(default=False)
- objects=UserManager()
- USERNAME_FIELD='email'
- REQUIRED_FIELDS=[]
- class Meta:
- verbose_name = 'User'
- def __unicode__(self):
- return self.email
- def __str__(self):
- return self.email
- def get_short_name(self):
- return self.email
- def has_perm(self,perm,obj=None):
- return True
- def has_module_perms(self,app_label):
- return True
- def email_user(self,subject,message,from_email=None,**kwargs):
- send_mail(subject, message, from_email, [self.email], **kwargs)
- @property
- def is_staff(self):
- return self.is_admin
Add Comment
Please, Sign In to add comment