Add through model to user school class connection, migrate all old

classes
This commit is contained in:
Ramon Wenger 2020-03-03 15:58:13 +01:00
parent ad8409f783
commit 35c981a2f2
5 changed files with 101 additions and 1 deletions

View File

@ -0,0 +1,29 @@
# Generated by Django 2.1.15 on 2020-03-03 12:58
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('users', '0011_auto_20200302_1613'),
]
operations = [
migrations.CreateModel(
name='UserSchoolClassConnection',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('active', models.BooleanField(default=True)),
('school_class', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.SchoolClass')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.AddField(
model_name='schoolclass',
name='users_with_active',
field=models.ManyToManyField(blank=True, related_name='school_classes_with_active', through='users.UserSchoolClassConnection', to=settings.AUTH_USER_MODEL),
),
]

View File

@ -0,0 +1,24 @@
# Generated by Django 2.1.15 on 2020-03-03 12:59
from django.db import migrations
from users.models import UserSchoolClassConnection
def forwards(apps, schema_editor):
SchoolClass = apps.get_model('users', 'SchoolClass')
UserSchoolClassConnection = apps.get_model('users', 'UserSchoolClassConnection')
for school_class in SchoolClass.objects.all():
for user in school_class.users.all():
UserSchoolClassConnection.objects.create(user=user, school_class=school_class, active=True)
class Migration(migrations.Migration):
dependencies = [
('users', '0012_auto_20200303_1258'),
]
operations = [
migrations.RunPython(forwards)
]

View File

@ -0,0 +1,17 @@
# Generated by Django 2.1.15 on 2020-03-03 13:06
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('users', '0013_auto_20200303_1259'),
]
operations = [
migrations.RemoveField(
model_name='schoolclass',
name='users',
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 2.1.15 on 2020-03-03 13:06
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0014_remove_schoolclass_users'),
]
operations = [
migrations.RemoveField(
model_name='schoolclass',
name='users_with_active',
),
migrations.AddField(
model_name='schoolclass',
name='users',
field=models.ManyToManyField(blank=True, related_name='school_classes', through='users.UserSchoolClassConnection', to=settings.AUTH_USER_MODEL),
),
]

View File

@ -11,6 +11,7 @@ from users.managers import RoleManager, UserRoleManager, UserManager
DEFAULT_SCHOOL_ID = 1 DEFAULT_SCHOOL_ID = 1
class User(AbstractUser): class User(AbstractUser):
last_module = models.ForeignKey('books.Module', related_name='+', on_delete=models.SET_NULL, null=True) last_module = models.ForeignKey('books.Module', related_name='+', on_delete=models.SET_NULL, null=True)
avatar_url = models.CharField(max_length=254, blank=True, default='') avatar_url = models.CharField(max_length=254, blank=True, default='')
@ -69,7 +70,7 @@ class User(AbstractUser):
class SchoolClass(models.Model): class SchoolClass(models.Model):
name = models.CharField(max_length=100, blank=False, null=False, unique=True) name = models.CharField(max_length=100, blank=False, null=False, unique=True)
is_deleted = models.BooleanField(blank=False, null=False, default=False) is_deleted = models.BooleanField(blank=False, null=False, default=False)
users = models.ManyToManyField(get_user_model(), related_name='school_classes', blank=True) users = models.ManyToManyField(get_user_model(), related_name='school_classes', blank=True, through='users.UserSchoolClassConnection')
code = models.CharField('Code zum Beitreten', blank=True, null=True, max_length=10, unique=True, default=None) code = models.CharField('Code zum Beitreten', blank=True, null=True, max_length=10, unique=True, default=None)
class Meta: class Meta:
@ -175,3 +176,9 @@ class UserRole(models.Model):
class UserSetting(models.Model): class UserSetting(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE, related_name='user_setting') user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE, related_name='user_setting')
selected_class = models.ForeignKey(SchoolClass, blank=True, null=True, on_delete=models.CASCADE) selected_class = models.ForeignKey(SchoolClass, blank=True, null=True, on_delete=models.CASCADE)
class UserSchoolClassConnection(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
school_class = models.ForeignKey(SchoolClass, on_delete=models.CASCADE)
active = models.BooleanField(default=True)