Projet

Général

Profil

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

Paul Marillonnet, 07 février 2022 17: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/0029_profile_profiletype.py    | 85 +++++++++++++++++++
 src/authentic2/custom_user/models.py          | 42 +++++++++
 2 files changed, 127 insertions(+)
 create mode 100644 src/authentic2/custom_user/migrations/0029_profile_profiletype.py
src/authentic2/custom_user/migrations/0029_profile_profiletype.py
1
# Generated by Django 2.2.24 on 2022-02-04 10:18
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', '0028_user_email_verified_date'),
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

  
......
474 475
        verbose_name = _('deleted user')
475 476
        verbose_name_plural = _('deleted users')
476 477
        ordering = ('deleted', 'id')
478

  
479

  
480
class ProfileType(models.Model):
481
    uuid = models.CharField(
482
        verbose_name=_('UUID'), max_length=32, default=utils_misc.get_hex_uuid, editable=False, unique=True
483
    )
484
    name = models.CharField(max_length=128, verbose_name=_('name'))
485
    slug = models.SlugField(verbose_name=_('slug'), max_length=256, unique=True)
486

  
487
    def save(self, *args, **kwargs):
488
        if not self.slug:
489
            self.slug = generate_slug(self.name)
490
        if len(self.slug) > 256:
491
            self.slug = self.slug[:256]
492
        return super().save(*args, **kwargs)
493

  
494
    class Meta:
495
        verbose_name = _('profile type')
496
        verbose_name_plural = _('profile types')
497
        ordering = ('name', 'slug')
498

  
499

  
500
class Profile(models.Model):
501
    profile_type = models.ForeignKey(
502
        verbose_name=_('profile type'),
503
        to=ProfileType,
504
        related_name='profiles',
505
        blank=True,
506
        null=True,
507
        on_delete=models.CASCADE,
508
    )
509
    user = models.ForeignKey(
510
        to=User, verbose_name=_('user'), related_name='subprofiles', on_delete=models.CASCADE
511
    )
512
    data = JSONField(verbose_name=_('profile data'), null=True, blank=True)
513

  
514
    class Meta:
515
        unique_together = (('user', 'profile_type'),)
516
        verbose_name = _('profile')
517
        verbose_name_plural = _('profiles')
518
        ordering = ('user', 'profile_type')
477
-