57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
# -*- encoding: utf-8 -*-
|
|
|
|
import uuid
|
|
|
|
from django.db import models
|
|
from django.contrib.auth.models import AbstractUser, BaseUserManager
|
|
|
|
|
|
class UserManager(BaseUserManager):
|
|
|
|
def create_user(self, email: str, name: str, password: str=None, **extra_fields):
|
|
if not email:
|
|
raise ValueError("Please provide an email address")
|
|
|
|
email = self.normalize_email(email)
|
|
user = self.model(email=email, name=name, **extra_fields)
|
|
user.set_password(password)
|
|
user.save()
|
|
|
|
return user
|
|
|
|
def create_superuser(self, email: str, name: str, password: str, **extra_fields):
|
|
extra_fields.setdefault("is_staff", True)
|
|
extra_fields.setdefault("is_superuser", True)
|
|
extra_fields.setdefault("is_active", True)
|
|
|
|
if not extra_fields.get("is_staff"):
|
|
raise ValueError("Superuser must have is_staff=True")
|
|
|
|
if not extra_fields.get("is_superuser"):
|
|
raise ValueError("Superuser must have is_superuser=True")
|
|
|
|
return self.create_user(email, name, password, **extra_fields)
|
|
|
|
|
|
class User(AbstractUser):
|
|
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
|
icon = models.ImageField(upload_to="users", default="users/default.webp")
|
|
name = models.CharField(max_length=150)
|
|
email = models.EmailField(unique=True)
|
|
|
|
USERNAME_FIELD = "email"
|
|
REQUIRED_FIELDS = ["name"]
|
|
|
|
objects = UserManager()
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
def serialize(self) -> dict:
|
|
return {
|
|
"id": self.id,
|
|
"icon": self.icon.url,
|
|
"name": self.name,
|
|
"email": self.email
|
|
}
|