Projet

Général

Profil

0001-custom_user-add-base-models-for-subprofile-managemen.patch

Paul Marillonnet, 06 janvier 2022 11:31

Télécharger (5,79 ko)

Voir les différences:

Subject: [PATCH 1/3] custom_user: add base models for subprofile management
 (#58554)

 .../migrations/0028_profile_profiletype.py    | 85 +++++++++++++++++++
 src/authentic2/custom_user/models.py          | 42 +++++++++
 2 files changed, 127 insertions(+)
 create mode 100644 src/authentic2/custom_user/migrations/0028_profile_profiletype.py
src/authentic2/custom_user/migrations/0028_profile_profiletype.py
1
# Generated by Django 2.2.19 on 2022-01-06 10:17
2

  
3
import django.contrib.postgres.fields.jsonb
4
import django.db.models.deletion
5
from django.conf import settings
6
from django.db import migrations, models
7

  
8
import authentic2.utils.misc
9

  
10

  
11
class Migration(migrations.Migration):
12

  
13
    dependencies = [
14
        ('custom_user', '0027_user_deactivation_reason'),
15
    ]
16

  
17
    operations = [
18
        migrations.CreateModel(
19
            name='ProfileType',
20
            fields=[
21
                (
22
                    'id',
23
                    models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
24
                ),
25
                (
26
                    'uuid',
27
                    models.CharField(
28
                        default=authentic2.utils.misc.get_hex_uuid,
29
                        editable=False,
30
                        max_length=32,
31
                        unique=True,
32
                        verbose_name='UUID',
33
                    ),
34
                ),
35
                ('name', models.CharField(max_length=128, verbose_name='name')),
36
                ('slug', models.SlugField(max_length=256, unique=True, verbose_name='slug')),
37
            ],
38
            options={
39
                'verbose_name': 'profile type',
40
                'verbose_name_plural': 'profile types',
41
                'ordering': ('name', 'slug'),
42
            },
43
        ),
44
        migrations.CreateModel(
45
            name='Profile',
46
            fields=[
47
                (
48
                    'id',
49
                    models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
50
                ),
51
                (
52
                    'data',
53
                    django.contrib.postgres.fields.jsonb.JSONField(
54
                        blank=True, null=True, verbose_name='profile data'
55
                    ),
56
                ),
57
                (
58
                    'profile_type',
59
                    models.ForeignKey(
60
                        blank=True,
61
                        null=True,
62
                        on_delete=django.db.models.deletion.CASCADE,
63
                        related_name='profiles',
64
                        to='custom_user.ProfileType',
65
                        verbose_name='profile type',
66
                    ),
67
                ),
68
                (
69
                    'user',
70
                    models.ForeignKey(
71
                        on_delete=django.db.models.deletion.CASCADE,
72
                        related_name='subprofiles',
73
                        to=settings.AUTH_USER_MODEL,
74
                        verbose_name='user',
75
                    ),
76
                ),
77
            ],
78
            options={
79
                'verbose_name': 'profile',
80
                'verbose_name_plural': 'profiles',
81
                'ordering': ('user', 'profile_type'),
82
                'unique_together': {('user', 'profile_type')},
83
            },
84
        ),
85
    ]
src/authentic2/custom_user/models.py
41 41
from authentic2.utils import misc as utils_misc
42 42
from authentic2.validators import email_validator
43 43
from django_rbac.models import PermissionMixin
44
from django_rbac.utils import generate_slug
44 45

  
45 46
from .managers import UserManager, UserQuerySet
46 47

  
......
460 461
        verbose_name = _('deleted user')
461 462
        verbose_name_plural = _('deleted users')
462 463
        ordering = ('deleted', 'id')
464

  
465

  
466
class ProfileType(models.Model):
467
    uuid = models.CharField(
468
        verbose_name=_('UUID'), max_length=32, default=utils_misc.get_hex_uuid, editable=False, unique=True
469
    )
470
    name = models.CharField(max_length=128, verbose_name=_('name'))
471
    slug = models.SlugField(verbose_name=_('slug'), max_length=256, unique=True)
472

  
473
    def save(self, *args, **kwargs):
474
        if not self.slug:
475
            self.slug = generate_slug(self.name)
476
        if len(self.slug) > 256:
477
            self.slug = self.slug[:256]
478
        return super().save(*args, **kwargs)
479

  
480
    class Meta:
481
        verbose_name = _('profile type')
482
        verbose_name_plural = _('profile types')
483
        ordering = ('name', 'slug')
484

  
485

  
486
class Profile(models.Model):
487
    profile_type = models.ForeignKey(
488
        verbose_name=_('profile type'),
489
        to=ProfileType,
490
        related_name='profiles',
491
        blank=True,
492
        null=True,
493
        on_delete=models.CASCADE,
494
    )
495
    user = models.ForeignKey(
496
        to=User, verbose_name=_('user'), related_name='subprofiles', on_delete=models.CASCADE
497
    )
498
    data = JSONField(verbose_name=_('profile data'), null=True, blank=True)
499

  
500
    class Meta:
501
        unique_together = (('user', 'profile_type'),)
502
        verbose_name = _('profile')
503
        verbose_name_plural = _('profiles')
504
        ordering = ('user', 'profile_type')
463
-