mirror of
https://github.com/bugsink/bugsink.git
synced 2025-12-31 02:10:16 -06:00
64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
import secrets
|
||
|
||
from django.db import models
|
||
from django.contrib.auth.models import AbstractUser
|
||
from django.conf import settings
|
||
from django.utils.translation import gettext_lazy as _, get_language_info
|
||
|
||
|
||
def language_choices():
|
||
items = [("auto", _("Auto (browser preference)"))]
|
||
|
||
for code, _label in settings.LANGUAGES:
|
||
info = get_language_info(code)
|
||
label = info["name_local"] \
|
||
if info["name_local"] == info["name_translated"] \
|
||
else f"{info['name_local']} ({info['name_translated']})"
|
||
items.append((code, label))
|
||
return items
|
||
|
||
|
||
class User(AbstractUser):
|
||
# > If you’re starting a new project, it’s highly recommended to set up a custom user model, even if the default
|
||
# > User model is sufficient for you. This model behaves identically to the default user model, but you’ll be able
|
||
# > to customize it in the future if the need arises
|
||
|
||
# (The above is no longer the only reason for a custom User model, since we started introducing custom fields.
|
||
# Regarding those fields, there is some pressure in the docs to put UserProfile fields in a separate model, but
|
||
# as long as the number of fields is small I think the User model makes more sense. We can always push them out
|
||
# later)
|
||
|
||
send_email_alerts = models.BooleanField(default=True, blank=True)
|
||
|
||
THEME_CHOICES = [
|
||
("system", _("System Default")),
|
||
("light", _("Light")),
|
||
("dark", _("Dark")),
|
||
]
|
||
theme_preference = models.CharField(
|
||
max_length=10,
|
||
choices=THEME_CHOICES,
|
||
default="system",
|
||
blank=False,
|
||
)
|
||
language = models.CharField(
|
||
_("Language"),
|
||
max_length=10,
|
||
choices=language_choices,
|
||
default="auto",
|
||
blank=False,
|
||
)
|
||
|
||
class Meta:
|
||
db_table = 'auth_user'
|
||
|
||
|
||
class EmailVerification(models.Model):
|
||
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
||
email = models.EmailField() # redundant, but future-proof for when we allow multiple emails per user
|
||
token = models.CharField(max_length=64, default=secrets.token_urlsafe, blank=False, null=False)
|
||
created_at = models.DateTimeField(auto_now_add=True)
|
||
|
||
def __str__(self):
|
||
return f"{self.user} ({self.email})"
|