Set custom user model

This commit is contained in:
Maximilian Friedersdorff 2024-06-28 17:51:36 +01:00
parent 382cdc74b5
commit 48ba45463f
24 changed files with 379 additions and 513 deletions

View file

@ -43,6 +43,7 @@ INSTALLED_APPS = [
"reinheit.apps.brew",
"reinheit.apps.styles",
"reinheit.apps.ingredients",
"reinheit.apps.user",
]
MIDDLEWARE = [
@ -136,3 +137,5 @@ AUTHENTICATION_BACKENDS = [
USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
AUTH_USER_MODEL = "user.User"

View file

View file

@ -1,4 +1,4 @@
# Generated by Django 5.0.6 on 2024-06-24 20:32
# Generated by Django 5.0.6 on 2024-06-28 16:48
import django.db.models.deletion
from django.db import migrations, models
@ -27,18 +27,27 @@ class Migration(migrations.Migration):
),
),
("name", models.CharField(max_length=255)),
("notes", models.TextField(blank=True, default="")),
("pitch_date", models.DateField(null=True)),
("bottling_date", models.DateField(null=True)),
(
"fermenter_volume",
models.FloatField(
help_text="Volume of liquid in fermenter prior to piching yeast"
),
),
("bottling_date", models.DateField(null=True)),
(
"bottled_volume",
models.FloatField(help_text="Volume of liquid bottled"),
models.FloatField(help_text="Volume of liquid bottled", null=True),
),
(
"priming_sugar",
models.FloatField(
help_text="Mass of priming sugar for the whole batch", null=True
),
),
("original_gravity", models.FloatField(null=True)),
("final_gravity", models.FloatField(null=True)),
(
"style",
models.ForeignKey(
@ -48,7 +57,7 @@ class Migration(migrations.Migration):
],
),
migrations.CreateModel(
name="Addition",
name="ChemicalAddition",
fields=[
(
"id",
@ -59,19 +68,120 @@ class Migration(migrations.Migration):
verbose_name="ID",
),
),
("mass", models.FloatField(help_text="The mass in kg added")),
("mass", models.FloatField(help_text="The mass of ingredient added")),
("added", models.DateTimeField(null=True)),
(
"brew",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="brew.brew"
),
),
(
"ingredient",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to="ingredients.ingredient",
to="ingredients.chemical",
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="FermentableAddition",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("mass", models.FloatField(help_text="The mass of ingredient added")),
("added", models.DateTimeField(null=True)),
(
"brew",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="brew.brew"
),
),
(
"brew",
models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="brew.brew"),
"ingredient",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to="ingredients.fermentable",
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="MaltAddition",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("mass", models.FloatField(help_text="The mass of ingredient added")),
("added", models.DateTimeField(null=True)),
(
"brew",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="brew.brew"
),
),
(
"ingredient",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to="ingredients.malt",
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="YeastAddition",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("mass", models.FloatField(help_text="The mass of ingredient added")),
("added", models.DateTimeField(null=True)),
(
"brew",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="brew.brew"
),
),
(
"ingredient",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to="ingredients.yeast",
),
),
],
options={
"abstract": False,
},
),
]

View file

@ -1,21 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-24 20:59
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("brew", "0001_initial"),
]
operations = [
migrations.AddField(
model_name="brew",
name="priming_sugar",
field=models.FloatField(
default=0, help_text="Mass of priming sugar for the whole batch"
),
preserve_default=False,
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-24 20:59
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("brew", "0002_brew_priming_sugar"),
]
operations = [
migrations.AddField(
model_name="brew",
name="notes",
field=models.TextField(blank=True, default=""),
),
]

View file

@ -1,45 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-25 20:50
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("brew", "0003_brew_notes"),
]
operations = [
migrations.AddField(
model_name="brew",
name="final_gravity",
field=models.FloatField(null=True),
),
migrations.AddField(
model_name="brew",
name="original_gravity",
field=models.FloatField(null=True),
),
migrations.AlterField(
model_name="addition",
name="brew",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="additions",
to="brew.brew",
),
),
migrations.AlterField(
model_name="brew",
name="bottled_volume",
field=models.FloatField(help_text="Volume of liquid bottled", null=True),
),
migrations.AlterField(
model_name="brew",
name="priming_sugar",
field=models.FloatField(
help_text="Mass of priming sugar for the whole batch", null=True
),
),
]

View file

@ -1,102 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-26 20:49
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("brew", "0004_brew_final_gravity_brew_original_gravity_and_more"),
]
operations = [
migrations.CreateModel(
name="FermentableAddition",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("mass", models.FloatField(help_text="The mass of ingredient added")),
("added", models.DateTimeField(null=True)),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="MaltAddition",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("mass", models.FloatField(help_text="The mass of ingredient added")),
("added", models.DateTimeField(null=True)),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="YeastAddition",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("mass", models.FloatField(help_text="The mass of ingredient added")),
("added", models.DateTimeField(null=True)),
],
options={
"abstract": False,
},
),
migrations.RemoveField(
model_name="addition",
name="brew",
),
migrations.RemoveField(
model_name="addition",
name="ingredient",
),
migrations.CreateModel(
name="ChemicalAddition",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("mass", models.FloatField(help_text="The mass of ingredient added")),
("added", models.DateTimeField(null=True)),
(
"brew",
models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="brew.brew"),
),
],
options={
"abstract": False,
},
),
]

View file

@ -1,63 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-26 20:49
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("brew", "0005_fermentableaddition_maltaddition_yeastaddition_and_more"),
("ingredients", "0006_chemical_fermentable_malt_yeast_delete_ingredient"),
]
operations = [
migrations.AddField(
model_name="chemicaladdition",
name="ingredient",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT, to="ingredients.chemical"
),
),
migrations.AddField(
model_name="fermentableaddition",
name="brew",
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="brew.brew"),
),
migrations.AddField(
model_name="fermentableaddition",
name="ingredient",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to="ingredients.fermentable",
),
),
migrations.AddField(
model_name="maltaddition",
name="brew",
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="brew.brew"),
),
migrations.AddField(
model_name="maltaddition",
name="ingredient",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to="ingredients.fermentable",
),
),
migrations.AddField(
model_name="yeastaddition",
name="brew",
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="brew.brew"),
),
migrations.AddField(
model_name="yeastaddition",
name="ingredient",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT, to="ingredients.yeast"
),
),
migrations.DeleteModel(
name="Addition",
),
]

View file

@ -1,22 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-26 20:52
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("brew", "0006_chemicaladdition_ingredient_fermentableaddition_brew_and_more"),
("ingredients", "0006_chemical_fermentable_malt_yeast_delete_ingredient"),
]
operations = [
migrations.AlterField(
model_name="maltaddition",
name="ingredient",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT, to="ingredients.malt"
),
),
]

View file

@ -1,4 +1,4 @@
# Generated by Django 5.0.6 on 2024-06-24 20:32
# Generated by Django 5.0.6 on 2024-06-28 16:48
import django.db.models.deletion
from django.db import migrations, models
@ -27,7 +27,7 @@ class Migration(migrations.Migration):
],
),
migrations.CreateModel(
name="Ingredient",
name="Malt",
fields=[
(
"id",
@ -38,18 +38,22 @@ class Migration(migrations.Migration):
verbose_name="ID",
),
),
("name", models.CharField(max_length=255)),
(
"description",
models.CharField(blank=True, default="", max_length=255),
),
(
"kind",
models.CharField(
choices=[
("YEAST", "Yeast"),
("FERM", "Fermentable"),
("HOP", "Hop"),
("DME", "Dry Malt Extract"),
("LME", "Liquid Malt Extract"),
("MALT", "Malted Grain"),
],
max_length=5,
max_length=4,
),
),
("name", models.CharField(max_length=255)),
(
"producer",
models.ForeignKey(
@ -58,5 +62,95 @@ class Migration(migrations.Migration):
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="Fermentable",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=255)),
(
"description",
models.CharField(blank=True, default="", max_length=255),
),
(
"producer",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="ingredients.producer",
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="Chemical",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=255)),
(
"description",
models.CharField(blank=True, default="", max_length=255),
),
(
"producer",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="ingredients.producer",
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="Yeast",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=255)),
(
"description",
models.CharField(blank=True, default="", max_length=255),
),
(
"producer",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="ingredients.producer",
),
),
],
options={
"abstract": False,
},
),
]

View file

@ -1,19 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-24 20:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("ingredients", "0001_initial"),
]
operations = [
migrations.AddField(
model_name="ingredient",
name="description",
field=models.TextField(default=""),
preserve_default=False,
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-24 20:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("ingredients", "0002_ingredient_description"),
]
operations = [
migrations.AlterField(
model_name="ingredient",
name="description",
field=models.TextField(blank=True, default=""),
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-24 20:50
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("ingredients", "0003_alter_ingredient_description"),
]
operations = [
migrations.AlterField(
model_name="ingredient",
name="description",
field=models.CharField(blank=True, default="", max_length=255),
),
]

View file

@ -1,26 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-24 20:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("ingredients", "0004_alter_ingredient_description"),
]
operations = [
migrations.AlterField(
model_name="ingredient",
name="kind",
field=models.CharField(
choices=[
("YEAST", "Yeast"),
("FERM", "Fermentable"),
("HOP", "Hop"),
("CHEM", "Chemical"),
],
max_length=5,
),
),
]

View file

@ -1,145 +0,0 @@
# Generated by Django 5.0.6 on 2024-06-26 20:49
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("brew", "0005_fermentableaddition_maltaddition_yeastaddition_and_more"),
("ingredients", "0005_alter_ingredient_kind"),
]
operations = [
migrations.CreateModel(
name="Chemical",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=255)),
(
"description",
models.CharField(blank=True, default="", max_length=255),
),
(
"producer",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="ingredients.producer",
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="Fermentable",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=255)),
(
"description",
models.CharField(blank=True, default="", max_length=255),
),
(
"producer",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="ingredients.producer",
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="Malt",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=255)),
(
"description",
models.CharField(blank=True, default="", max_length=255),
),
(
"kind",
models.CharField(
choices=[
("DME", "Dry Malt Extract"),
("LME", "Liquid Malt Extract"),
("MALT", "Malted Grain"),
],
max_length=4,
),
),
(
"producer",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="ingredients.producer",
),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="Yeast",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=255)),
(
"description",
models.CharField(blank=True, default="", max_length=255),
),
(
"producer",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="ingredients.producer",
),
),
],
options={
"abstract": False,
},
),
migrations.DeleteModel(
name="Ingredient",
),
]

View file

@ -1,4 +1,4 @@
# Generated by Django 5.0.6 on 2024-06-24 20:32
# Generated by Django 5.0.6 on 2024-06-28 16:48
from django.db import migrations, models

View file

View file

@ -0,0 +1,7 @@
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)

View file

@ -0,0 +1,6 @@
from django.apps import AppConfig
class UserConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "reinheit.apps.user"

View file

@ -0,0 +1,132 @@
# Generated by Django 5.0.6 on 2024-06-28 16:49
import django.contrib.auth.models
import django.contrib.auth.validators
import django.utils.timezone
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
("auth", "0012_alter_user_first_name_max_length"),
]
operations = [
migrations.CreateModel(
name="User",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("password", models.CharField(max_length=128, verbose_name="password")),
(
"last_login",
models.DateTimeField(
blank=True, null=True, verbose_name="last login"
),
),
(
"is_superuser",
models.BooleanField(
default=False,
help_text="Designates that this user has all permissions without explicitly assigning them.",
verbose_name="superuser status",
),
),
(
"username",
models.CharField(
error_messages={
"unique": "A user with that username already exists."
},
help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.",
max_length=150,
unique=True,
validators=[
django.contrib.auth.validators.UnicodeUsernameValidator()
],
verbose_name="username",
),
),
(
"first_name",
models.CharField(
blank=True, max_length=150, verbose_name="first name"
),
),
(
"last_name",
models.CharField(
blank=True, max_length=150, verbose_name="last name"
),
),
(
"email",
models.EmailField(
blank=True, max_length=254, verbose_name="email address"
),
),
(
"is_staff",
models.BooleanField(
default=False,
help_text="Designates whether the user can log into this admin site.",
verbose_name="staff status",
),
),
(
"is_active",
models.BooleanField(
default=True,
help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.",
verbose_name="active",
),
),
(
"date_joined",
models.DateTimeField(
default=django.utils.timezone.now, verbose_name="date joined"
),
),
(
"groups",
models.ManyToManyField(
blank=True,
help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.",
related_name="user_set",
related_query_name="user",
to="auth.group",
verbose_name="groups",
),
),
(
"user_permissions",
models.ManyToManyField(
blank=True,
help_text="Specific permissions for this user.",
related_name="user_set",
related_query_name="user",
to="auth.permission",
verbose_name="user permissions",
),
),
],
options={
"verbose_name": "user",
"verbose_name_plural": "users",
"abstract": False,
},
managers=[
("objects", django.contrib.auth.models.UserManager()),
],
),
]

View file

@ -0,0 +1,5 @@
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass

View file

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View file

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.