Skip to content
Snippets Groups Projects
Commit 0b7f7593 authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Add models and migration

parent 19ec3de7
No related branches found
No related tags found
1 merge request!227Resolve "Additional fields for people per group"
Pipeline #1742 failed
# Generated by Django 3.0.5 on 2020-04-26 15:34
import django.contrib.postgres.fields.jsonb
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('core', '0024_globalpermissions'),
]
operations = [
migrations.CreateModel(
name='AdditionalField',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('extended_data', django.contrib.postgres.fields.jsonb.JSONField(default=dict, editable=False)),
('title', models.CharField(max_length=50, verbose_name='Title of field')),
('field_type', models.CharField(choices=[('booleanfield', 'BooleanField'), ('charfield', 'CharField'), ('datefield', 'DateField'), ('datetimefield', 'DateTimeField'), ('decimalfield', 'DecimalField'), ('emailfield', 'EmailField'), ('floatfield', 'FloatField'), ('Integerfield', 'IntegerField'), ('ipaddressfield', 'IPAddressField'), ('genericipaddressfield', 'GenericIPAddressField'), ('nullbooleanfield', 'NullBooleanField'), ('textfield', 'TextField'), ('timefield', 'TimeField'), ('urlfield', 'URLField')], max_length=50, verbose_name='Type of field')),
],
options={
'verbose_name': 'Addtitional field',
'verbose_name_plural': 'Addtitional fields',
},
),
migrations.CreateModel(
name='PersonGroupThrough',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('extended_data', django.contrib.postgres.fields.jsonb.JSONField(default=dict, editable=False)),
('field', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.AdditionalField')),
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Group')),
('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Person')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='group',
name='additional_fields',
field=models.ManyToManyField(through='core.PersonGroupThrough', to='core.AdditionalField'),
),
]
......@@ -23,6 +23,24 @@ from .util.model_helpers import ICONS
from constance import config
FIELD_CHOICES = (
("booleanfield", "BooleanField"),
("charfield", "CharField"),
("datefield", "DateField"),
("datetimefield", "DateTimeField"),
("decimalfield", "DecimalField"),
("emailfield", "EmailField"),
("floatfield", "FloatField"),
("Integerfield", "IntegerField"),
("ipaddressfield", "IPAddressField"),
("genericipaddressfield", "GenericIPAddressField"),
("nullbooleanfield", "NullBooleanField"),
("textfield", "TextField"),
("timefield", "TimeField"),
("urlfield", "URLField"),
)
class School(ExtensibleModel):
"""A school that will have many other objects linked to it.
AlekSIS has multi-tenant support by linking all objects to a school,
......@@ -246,6 +264,15 @@ class Person(ExtensibleModel):
self.primary_group = self.member_of.filter(name__regex=pattern).first()
class AdditionalField(ExtensibleModel):
title = models.CharField(verbose_name=_("Title of field"), max_length=50)
field_type = models.CharField(verbose_name=_("Type of field"), choices=FIELD_CHOICES, max_length=50)
class Meta:
verbose_name = _("Addtitional field")
verbose_name_plural = _("Addtitional fields")
class Group(ExtensibleModel):
"""Any kind of group of persons in a school, including, but not limited
classes, clubs, and the like.
......@@ -276,6 +303,7 @@ class Group(ExtensibleModel):
)
type = models.ForeignKey("GroupType", on_delete=models.CASCADE, related_name="type", verbose_name=_("Type of group"), null=True, blank=True)
additional_fields = models.ManyToManyField(AdditionalField, through="PersonGroupThrough")
def get_absolute_url(self) -> str:
......@@ -303,6 +331,12 @@ class Group(ExtensibleModel):
dj_group.save()
class PersonGroupThrough(ExtensibleModel):
field = models.ForeignKey(AdditionalField, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
person = models.ForeignKey(Person, on_delete=models.CASCADE)
class Activity(ExtensibleModel):
user = models.ForeignKey("Person", on_delete=models.CASCADE, related_name="activities")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment