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