Hello team, I need help with understanding how djoser and custom user model works better. Problem breakdown First, I’m trying to manage my system users. I want to implement customers, employees, and admin as users in the system. I want to know if I should create a separate table in my DB for employees after setting staff=true in my custom user model. Can you help me understand what it means and how to use staff=true to create an employee system user?
Secondly, I want the token to be generated on creating a user but that too is not happening. Note: I can create a token for a user via the admin interface. Attached are some of my project files. -- 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 django-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAAw18mB12Wj2YCrvmJFQbPX%3DAm-g4Wh7-ngDWZehhGBDgFq%3DKw%40mail.gmail.com.
from django.contrib import admin from .models import MyUser # Register your models here. admin.site.register(MyUser)
from django.db import models from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin # Create your models here. class MyUserManager(BaseUserManager): def create_user(self, email, username, password=None, is_active=True, is_admin=False, is_staff=False, **extra_fields): """ Create and save a User with the given email and password. """ if not email: raise ValueError("The Email must be set") if not username: raise ValueError("The Username must be set") if not password: raise ValueError("The Password must be set'") user_obj = self.model(email=self.normalize_email(email)) user_obj.set_password(password) user_obj.username = username user_obj.email = email user_obj.active = is_active user_obj.admin = is_admin user_obj.staff = is_staff user_obj.save(using=self._db) return user_obj def create_staff(self, email, username, password=None, **extra_fields): myuser = self.create_user(email=email, username=username, password=password, is_staff=True) myuser.active = True myuser.staff = True myuser.save(using=self._db) return myuser def create_superuser(self, email, password, username, **extra_fields): myuser = self.create_user(email=email, username=username, password=password, is_staff=True, is_admin=True, **extra_fields) myuser.active = True myuser.staff = True myuser.admin = True myuser.save(using=self._db) return myuser class MyUser(AbstractBaseUser): email = models.EmailField(max_length=60, unique=True) username = models.CharField(max_length=60, unique=True) phone = models.CharField(null=True, max_length=15) first_name = models.CharField(max_length=60, null=True) last_name = models.CharField(max_length=60, null=True) active = models.BooleanField(default=True) staff = models.BooleanField(default=False) admin = models.BooleanField(default=False) timestamp = models.DateTimeField(auto_now_add=True) USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['username', 'phone', 'first_name', 'last_name', 'is_admin', 'is_staff'] objects = MyUserManager() def __str__(self): return self.email + ',' + self.username def has_perm(self, perm, obj=None): return self.admin def has_module_perms(self, app_label): return True @property def is_staff(self): return self.staff @property def is_admin(self): return self.admin @property def is_active(self): return self.active
from rest_framework import serializers from djoser.serializers import UserCreateSerializer from .models import MyUser from rest_framework.authtoken.models import Token class MyUserCreateSerializer(UserCreateSerializer): class Meta(UserCreateSerializer.Meta): model = MyUser fields = '__all__' # class MyUserSerializer(serializers.ModelSerializer): # class Meta: # model = MyUser # fields = '__all__' # extra_kwargs = {'password': {'write_only': True, 'required': True}} # # def create(self, validated_data): # user = MyUser.objects.create_user(**validated_data) # user.is_active = True # Token.objects.create(user=user) # return user
from django.urls import path from django.conf.urls import include from rest_framework.routers import DefaultRouter from rest_framework import routers # from .views import MyUserViewSet from rest_framework.authtoken.views import obtain_auth_token router = routers.DefaultRouter() # router.register('myusers', MyUserViewSet) urlpatterns = [ path('', include(router.urls)), path('', include('djoser.urls')), path('', include('djoser.urls.authtoken')), # path('login', obtain_auth_token, name='login'), ]