customUser with email as username

This commit is contained in:
Laetitia Getti 2023-05-10 12:35:15 +02:00
parent 97c507ae15
commit 5075ed3f27
11 changed files with 247 additions and 9 deletions

View file

@ -0,0 +1,15 @@
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .forms import CustomUserChangeForm, CustomUserCreationForm
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = CustomUserChangeForm
model = CustomUser
list_display = ["username", "first_name", "last_name"]
admin.site.register(CustomUser, CustomUserAdmin)

View file

@ -0,0 +1,23 @@
from django import forms
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ("username", "first_name", "last_name", "password1", "password2")
widgets = {
"username": forms.TextInput(
attrs={
"placeholder": "exemple@mail.fr",
}
),
}
class CustomUserChangeForm(UserChangeForm): # pas encore utilisé - pour la V1
class Meta:
model = CustomUser
fields = ("email", "first_name", "last_name")

View file

@ -0,0 +1,137 @@
# Generated by Django 4.2 on 2023-05-09 15:04
import django.contrib.auth.models
import django.contrib.auth.validators
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
initial = True
dependencies = [
("auth", "0012_alter_user_first_name_max_length"),
]
operations = [
migrations.CreateModel(
name="CustomUser",
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"
),
),
(
"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"
),
),
(
"email",
models.EmailField(
blank=True,
error_messages={
"unique": "Un·e utilisateur·ice avec cette adresse mail existe déjà."
},
max_length=254,
unique=True,
verbose_name="Adresse mail",
),
),
(
"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,31 @@
# Generated by Django 4.2 on 2023-05-10 09:40
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("accounts", "0001_initial"),
]
operations = [
migrations.AlterField(
model_name="customuser",
name="email",
field=models.EmailField(
blank=True, max_length=254, verbose_name="email address"
),
),
migrations.AlterField(
model_name="customuser",
name="username",
field=models.EmailField(
error_messages={
"unique": "Un·e utilisateur·ice avec cette adresse mail existe déjà."
},
max_length=254,
unique=True,
verbose_name="Email",
),
),
]

View file

@ -1,3 +1,15 @@
from django.contrib.auth.models import AbstractUser
from django.db import models from django.db import models
# Create your models here.
class CustomUser(AbstractUser):
username = models.EmailField(
"Email",
unique=True,
error_messages={
"unique": "Un·e utilisateur·ice avec cette adresse mail existe déjà.",
},
)
def __str__(self):
return self.get_full_name()

View file

@ -1,9 +1,11 @@
from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.views import LoginView
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.views import generic from django.views import generic
from .forms import CustomUserCreationForm
class SignUpView(generic.CreateView): class SignUpView(generic.CreateView):
form_class = UserCreationForm form_class = CustomUserCreationForm
success_url = reverse_lazy("accounts:login") success_url = reverse_lazy("accounts:login")
template_name = "registration/signup.html" template_name = "registration/signup.html"

View file

@ -1,4 +1,4 @@
from django.contrib.auth.models import User from django.contrib.auth import get_user_model
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
from django.db import IntegrityError from django.db import IntegrityError
@ -35,7 +35,7 @@ class GroupedOrderForm(ModelForm):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def save(self, commit=True): def save(self, commit=True):
self.instance.orga = User.objects.get(id=self.user.pk) self.instance.orga = get_user_model().objects.get(id=self.user.pk)
return super().save(commit=commit) return super().save(commit=commit)
def clean(self): def clean(self):
@ -45,7 +45,7 @@ class GroupedOrderForm(ModelForm):
GroupedOrder.objects.get( GroupedOrder.objects.get(
name=cleaned_data["name"], name=cleaned_data["name"],
delivery_date=cleaned_data["delivery_date"], delivery_date=cleaned_data["delivery_date"],
orga=User.objects.get(id=self.user.pk), orga=get_user_model().objects.get(id=self.user.pk),
) )
except GroupedOrder.DoesNotExist: except GroupedOrder.DoesNotExist:
pass pass

View file

@ -0,0 +1,17 @@
# Generated by Django 4.2 on 2023-05-09 15:04
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("order", "0015_groupedorder_description_groupedorder_place"),
]
operations = [
migrations.AlterField(
model_name="groupedorder",
name="description",
field=models.TextField(blank=True, null=True, verbose_name="Description"),
),
]

View file

@ -1,16 +1,17 @@
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from la_chariotte.settings import AUTH_USER_MODEL
class GroupedOrder(models.Model): class GroupedOrder(models.Model):
name = models.CharField( name = models.CharField(
max_length=100, null=True, verbose_name="Titre de la commande" max_length=100, null=True, verbose_name="Titre de la commande"
) # optionnal ) # optionnal
orga = models.ForeignKey( orga = models.ForeignKey(
User, on_delete=models.CASCADE, verbose_name="Organisateur·ice" AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name="Organisateur·ice"
) )
delivery_date = models.DateField("Date de livraison") delivery_date = models.DateField("Date de livraison")
deadline = models.DateTimeField("Date limite de commande") deadline = models.DateTimeField("Date limite de commande")

View file

@ -2,7 +2,6 @@ import datetime
import pytest import pytest
from django.contrib import auth from django.contrib import auth
from django.contrib.auth.models import User
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone

View file

@ -116,6 +116,7 @@ AUTH_PASSWORD_VALIDATORS = [
}, },
] ]
AUTH_USER_MODEL = "accounts.CustomUser"
# Internationalization # Internationalization
# https://docs.djangoproject.com/en/4.1/topics/i18n/ # https://docs.djangoproject.com/en/4.1/topics/i18n/