define allowed services m2m for user profile types (#60082)
This commit is contained in:
parent
94b2e25d59
commit
6049dc74dc
|
@ -0,0 +1,48 @@
|
|||
# Generated by Django 2.2.27 on 2022-03-04 10:36
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('authentic2', '0035_service_home_url'),
|
||||
('custom_user', '0029_profile_profiletype'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ServiceProfileType',
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||
),
|
||||
(
|
||||
'profile_type',
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE, to='custom_user.ProfileType'
|
||||
),
|
||||
),
|
||||
(
|
||||
'service',
|
||||
models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='authentic2.Service'),
|
||||
),
|
||||
],
|
||||
options={
|
||||
'unique_together': {('service', 'profile_type')},
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='profiletype',
|
||||
name='services',
|
||||
field=models.ManyToManyField(
|
||||
blank=True,
|
||||
related_name='_profiletype_services_+',
|
||||
through='custom_user.ServiceProfileType',
|
||||
to='authentic2.Service',
|
||||
verbose_name='allowed services for this profile type',
|
||||
),
|
||||
),
|
||||
]
|
|
@ -484,6 +484,14 @@ class ProfileType(models.Model):
|
|||
name = models.CharField(max_length=64, verbose_name=_('name'))
|
||||
slug = models.SlugField(verbose_name=_('slug'), max_length=64, unique=True)
|
||||
|
||||
services = models.ManyToManyField(
|
||||
to=Service,
|
||||
verbose_name=_('allowed services for this profile type'),
|
||||
through='ServiceProfileType',
|
||||
blank=True,
|
||||
related_name='profile_types+',
|
||||
)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.slug:
|
||||
cls = type(self)
|
||||
|
@ -515,3 +523,11 @@ class Profile(models.Model):
|
|||
verbose_name = _('profile')
|
||||
verbose_name_plural = _('profiles')
|
||||
ordering = ('user', 'profile_type')
|
||||
|
||||
|
||||
class ServiceProfileType(models.Model):
|
||||
service = models.ForeignKey(Service, on_delete=models.CASCADE)
|
||||
profile_type = models.ForeignKey(ProfileType, on_delete=models.CASCADE)
|
||||
|
||||
class Meta:
|
||||
unique_together = (('service', 'profile_type'),)
|
||||
|
|
|
@ -20,6 +20,10 @@ class Migration(migrations.Migration):
|
|||
('custom_user', '0019_add_user_deleted'),
|
||||
]
|
||||
|
||||
run_before = [
|
||||
('custom_user', '0026_remove_user_deleted'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(fill_deleted, migrations.RunPython.noop),
|
||||
migrations.RemoveField(
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
# Generated by Django 2.2.27 on 2022-03-04 10:36
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('custom_user', '0030_auto_20220304_1136'),
|
||||
('authentic2', '0035_service_home_url'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='service',
|
||||
name='profile_types',
|
||||
field=models.ManyToManyField(
|
||||
blank=True,
|
||||
related_name='_service_profile_types_+',
|
||||
through='custom_user.ServiceProfileType',
|
||||
to='custom_user.ProfileType',
|
||||
verbose_name='allowed services for this profile type',
|
||||
),
|
||||
),
|
||||
]
|
|
@ -383,6 +383,14 @@ class Service(models.Model):
|
|||
)
|
||||
home_url = models.URLField(verbose_name=_('Home URL'), max_length=256, null=True, blank=True)
|
||||
|
||||
profile_types = models.ManyToManyField(
|
||||
to='custom_user.ProfileType',
|
||||
verbose_name=_('allowed services for this profile type'),
|
||||
through='custom_user.ServiceProfileType',
|
||||
blank=True,
|
||||
related_name='services+',
|
||||
)
|
||||
|
||||
objects = managers.ServiceManager()
|
||||
|
||||
def clean(self):
|
||||
|
|
|
@ -154,3 +154,14 @@ def test_profile_type_model(db):
|
|||
assert pft.slug == 'a' * 63
|
||||
pft = ProfileType.objects.create(name='a' * 63)
|
||||
assert pft.slug == 'a' * 30 + '-1-' + 'a' * 31
|
||||
|
||||
|
||||
def test_service_profile_type(db):
|
||||
from authentic2.custom_user.models import ProfileType, ServiceProfileType
|
||||
from authentic2.models import Service
|
||||
|
||||
service = Service.objects.create(name='aaa')
|
||||
pft = ProfileType.objects.create(name='bbb')
|
||||
ServiceProfileType.objects.create(service=service, profile_type=pft)
|
||||
assert list(service.profile_types.all()) == [pft]
|
||||
assert list(pft.services.all()) == [service]
|
||||
|
|
Loading…
Reference in New Issue