0001-custom_user-add-base-models-for-subprofile-managemen.patch
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 |
- |