Skip to content

Instantly share code, notes, and snippets.

@achingachris
Created December 22, 2023 10:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save achingachris/915ce84a847c1ddba3bb183766c7858b to your computer and use it in GitHub Desktop.
Save achingachris/915ce84a847c1ddba3bb183766c7858b to your computer and use it in GitHub Desktop.
import uuid
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.utils.translation import gettext_lazy as _
class User(AbstractUser):
class Types(models.TextChoices):
STAFF = "STAFF", "Staff"
MEMBER = "MEMBER", "Member"
id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False, unique=True, verbose_name='User ID')
type = models.CharField(_('Type'), max_length=50, choices=Types.choices, default=Types.MEMBER)
class StaffManager(models.Manager):
def get_queryset(self, *args, **kwargs):
return super().get_queryset(*args, **kwargs).filter(type=User.Types.STAFF)
class MemberManager(models.Manager):
def get_queryset(self, *args, **kwargs):
return super().get_queryset(*args, **kwargs).filter(type=User.Types.MEMBER)
class Staff(User):
objects = StaffManager()
class Meta:
proxy = True
def save(self, *args, **kwargs):
if not self.pk:
self.type = User.Types.STAFF
return super().save(*args, **kwargs)
class Member(User):
objects = MemberManager()
class Meta:
proxy = True
def save(self, *args, **kwargs):
if not self.pk:
self.type = User.Types.MEMBER
return super().save(*args, **kwargs)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment