TrilbyUsers are one-to-one matched with kepi.AcPerson.

In other words, all the users Django knows about, kepi knows about too.

Note that this has broken the serialisers :/

When you create a TrilbyUser, the kepi.AcPerson is created automatically to match.
trilby
Marnanel Thurman 2019-10-09 18:47:44 +01:00
rodzic a75d86756d
commit 5733b60a5a
3 zmienionych plików z 90 dodań i 2 usunięć

Wyświetl plik

@ -0,0 +1,47 @@
# Generated by Django 2.2.4 on 2019-10-09 17:29
import django.contrib.auth.models
import django.contrib.auth.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
initial = True
dependencies = [
('kepi', '0001_initial'),
('auth', '0011_update_proxy_permissions'),
]
operations = [
migrations.CreateModel(
name='TrilbyUser',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('email', models.EmailField(blank=True, max_length=254, unique=True, verbose_name='email address')),
('actor', models.OneToOneField(null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='kepi.AcPerson')),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
],
options={
'verbose_name': 'user',
'verbose_name_plural': 'users',
'abstract': False,
},
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
]

Wyświetl plik

@ -0,0 +1,19 @@
# Generated by Django 2.2.4 on 2019-10-09 17:37
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('trilby_api', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='trilbyuser',
name='actor',
field=models.OneToOneField(default=None, on_delete=django.db.models.deletion.CASCADE, to='kepi.AcPerson'),
),
]

Wyświetl plik

@ -1,6 +1,18 @@
from django.db import models
from django.contrib.auth.models import AbstractUser
from chapeau.kepi.models import AcPerson
from chapeau.kepi.create import create
import chapeau.trilby_api.models
def _create_actor(username):
actor = {
'id': '@'+username,
'type': 'Person',
}
return create(
value=actor,
)
class TrilbyUser(AbstractUser):
@ -21,9 +33,19 @@ class TrilbyUser(AbstractUser):
actor = models.OneToOneField(
AcPerson,
on_delete=models.DO_NOTHING,
on_delete=models.CASCADE,
unique=True,
null=True,
default=None,
)
def save(self, *args, **kwargs):
try:
self.actor
except TrilbyUser.actor.RelatedObjectDoesNotExist:
self.actor = _create_actor(
username = self.username,
)
super().save(*args, **kwargs)