mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-03 12:21:52 +02:00
customUser with email as username
This commit is contained in:
parent
97c507ae15
commit
5075ed3f27
11 changed files with 247 additions and 9 deletions
15
la_chariotte/accounts/admin.py
Normal file
15
la_chariotte/accounts/admin.py
Normal 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)
|
23
la_chariotte/accounts/forms.py
Normal file
23
la_chariotte/accounts/forms.py
Normal 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")
|
137
la_chariotte/accounts/migrations/0001_initial.py
Normal file
137
la_chariotte/accounts/migrations/0001_initial.py
Normal 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()),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -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",
|
||||
),
|
||||
),
|
||||
]
|
|
@ -1,3 +1,15 @@
|
|||
from django.contrib.auth.models import AbstractUser
|
||||
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()
|
||||
|
|
|
@ -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.views import generic
|
||||
|
||||
from .forms import CustomUserCreationForm
|
||||
|
||||
|
||||
class SignUpView(generic.CreateView):
|
||||
form_class = UserCreationForm
|
||||
form_class = CustomUserCreationForm
|
||||
success_url = reverse_lazy("accounts:login")
|
||||
template_name = "registration/signup.html"
|
||||
|
|
|
@ -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.db import IntegrityError
|
||||
|
||||
|
@ -35,7 +35,7 @@ class GroupedOrderForm(ModelForm):
|
|||
super().__init__(*args, **kwargs)
|
||||
|
||||
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)
|
||||
|
||||
def clean(self):
|
||||
|
@ -45,7 +45,7 @@ class GroupedOrderForm(ModelForm):
|
|||
GroupedOrder.objects.get(
|
||||
name=cleaned_data["name"],
|
||||
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:
|
||||
pass
|
||||
|
|
|
@ -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"),
|
||||
),
|
||||
]
|
|
@ -1,16 +1,17 @@
|
|||
from django.contrib.auth.models import User
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db import models
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
|
||||
from la_chariotte.settings import AUTH_USER_MODEL
|
||||
|
||||
|
||||
class GroupedOrder(models.Model):
|
||||
name = models.CharField(
|
||||
max_length=100, null=True, verbose_name="Titre de la commande"
|
||||
) # optionnal
|
||||
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")
|
||||
deadline = models.DateTimeField("Date limite de commande")
|
||||
|
|
|
@ -2,7 +2,6 @@ import datetime
|
|||
|
||||
import pytest
|
||||
from django.contrib import auth
|
||||
from django.contrib.auth.models import User
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
|
||||
|
|
|
@ -116,6 +116,7 @@ AUTH_PASSWORD_VALIDATORS = [
|
|||
},
|
||||
]
|
||||
|
||||
AUTH_USER_MODEL = "accounts.CustomUser"
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/4.1/topics/i18n/
|
||||
|
|
Loading…
Reference in a new issue