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'),
]

Reply via email to