Hello!

I've created a Django app for my company to track employee infractions 
(missed punch, late to a shift, etc.), but I'm at a roadblock in terms of 
adding users. Currently, the only way I can add users is through the 
command line. I'd much rather be able to add users through the 
django.contrib.admin site. However, I've found that if I input a password 
there, it treats is as the value to enter into the database (post 
hashing/salting/etc.) rather than raw text. This obviously does not work.

I'm using an AbstractUser model called Employee to represent users instead 
of the default User model. This is just so I have the option of customizing 
my model down the road if need be without having to deal with broken 
ForeignKey relationships.

If this were on the frontend, I would write a view that would take the raw 
password and send it through set_password(), and that would be the end of 
it. But I'm not sure how to do that with the admin site.

*Models.py:*
from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.
class Employee(AbstractUser):
 def __str__(self):
 return self.first_name

class InfractionType(models.Model):
 description = models.CharField(max_length=30)

 def __str__(self):
 return self.description


class Infraction(models.Model):
 timestamp = models.DateTimeField()
 employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
 type = models.ForeignKey(InfractionType, on_delete=models.CASCADE)
 has_comment = models.BooleanField(default=False)
 description = models.CharField(max_length=200)

 def __str__(self):
 return str(self.employee) + ": " + self.description


*Admin.py:*
from django.contrib import admin

# Register your models here.
from .models import Employee, InfractionType, Infraction

class InfractionInline(admin.TabularInline):
 model = Infraction
 extra = 0

class EmployeeAdmin(admin.ModelAdmin):
 fieldsets = [
 ('Authentication and Metadata', {'fields': ['username', 'first_name', 
'last_name', 'email', 'groups', 'is_staff', 'is_active'], 'classes': [
'collapse']}),

 ]
 inlines = [InfractionInline]

 # Prevent users from getting deleted (should be made inactive instead)
 def has_delete_permission(self, request, obj=None):
 return False

admin.site.register(Employee, EmployeeAdmin)
admin.site.register(InfractionType)

What I see on the admin site:

<https://lh3.googleusercontent.com/-NRNE_-LKhwo/WxxISxYyisI/AAAAAAAAWms/hpmqa5_9fZQHn-42NK8PQJ_AuOo9C2dDwCLcBGAs/s1600/Screen%2BShot%2B2018-06-09%2Bat%2B14.32.03.png>
<https://lh3.googleusercontent.com/-lIc4yE6amNM/WxxIPuf0eCI/AAAAAAAAWmo/Q8PlbP1shHkNp2O70uZJcpyDGpevZVw2gCLcBGAs/s1600/Screen%2BShot%2B2018-06-09%2Bat%2B14.31.33.png>
 
<https://lh3.googleusercontent.com/-lIc4yE6amNM/WxxIPuf0eCI/AAAAAAAAWmo/Q8PlbP1shHkNp2O70uZJcpyDGpevZVw2gCLcBGAs/s1600/Screen%2BShot%2B2018-06-09%2Bat%2B14.31.33.png>


Thanks for your help!

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/974890d1-9492-45a1-b3d9-6ba09558cbd0%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to