diff --git a/biscuit/core/forms.py b/biscuit/core/forms.py index f6334c279c01d91585cf7553de888f35b4dea0fe..1f2d6c6c3ed28d48133c4b0abbe9aaa0e5b92dba 100644 --- a/biscuit/core/forms.py +++ b/biscuit/core/forms.py @@ -22,14 +22,15 @@ class PersonAccountForm(forms.ModelForm): if self.cleaned_data.get('new_user', None): if self.cleaned_data.get('user', None): - self.add_error('new_user', _('You cannot set a new username when also selecting an existing user.')) + self.add_error('new_user', _( + 'You cannot set a new username when also selecting an existing user.')) elif User.objects.filter(username=self.cleaned_data['new_user']).exists(): self.add_error('new_user', _('This username is already in use.')) else: new_user_obj = User.objects.create_user(self.cleaned_data['new_user'], self.instance.email, first_name=self.instance.first_name, - last_name=self.instance.last_name) + last_name=self.instance.last_name) self.cleaned_data['user'] = new_user_obj @@ -37,10 +38,12 @@ class PersonAccountForm(forms.ModelForm): PersonsAccountsFormSet = forms.modelformset_factory( Person, form=PersonAccountForm, max_num=0, extra=0) + class EditPersonForm(forms.ModelForm): class Meta: model = Person - fields = ['user', 'is_active', 'first_name', 'last_name', 'additional_name', 'short_name', 'street', 'housenumber', 'postal_code', 'place', 'phone_number', 'mobile_number', 'email', 'date_of_birth', 'sex', 'photo', 'photo_cropping'] + fields = ['user', 'is_active', 'first_name', 'last_name', 'additional_name', 'short_name', 'street', 'housenumber', + 'postal_code', 'place', 'phone_number', 'mobile_number', 'email', 'date_of_birth', 'sex', 'photo', 'photo_cropping'] new_user = forms.CharField( required=False, @@ -52,14 +55,15 @@ class EditPersonForm(forms.ModelForm): if self.cleaned_data.get('new_user', None): if self.cleaned_data.get('user', None): - self.add_error('new_user', _('You cannot set a new username when also selecting an existing user.')) + self.add_error('new_user', _( + 'You cannot set a new username when also selecting an existing user.')) elif User.objects.filter(username=self.cleaned_data['new_user']).exists(): self.add_error('new_user', _('This username is already in use.')) else: new_user_obj = User.objects.create_user(self.cleaned_data['new_user'], self.instance.email, first_name=self.instance.first_name, - last_name=self.instance.last_name) + last_name=self.instance.last_name) self.cleaned_data['user'] = new_user_obj diff --git a/biscuit/core/migrations/0001_initial.py b/biscuit/core/migrations/0001_initial.py index c83d121455586b5fd5d5e3aa738c41de156fb704..ad78d125591b6c9e59be45f1ff8ff9477b2d253e 100644 --- a/biscuit/core/migrations/0001_initial.py +++ b/biscuit/core/migrations/0001_initial.py @@ -18,21 +18,29 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Person', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('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')), + ('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')), ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), - ('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')), + ('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')), ('is_student', models.BooleanField(default=False)), ('is_teacher', models.BooleanField(default=False)), - ('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')), + ('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', diff --git a/biscuit/core/migrations/0002_fill_person_model.py b/biscuit/core/migrations/0002_fill_person_model.py index 122a2e14aec3b513bec56b003125fd2b02a4e6e6..a5a31991c0c8768a24901ad20996611406f46726 100644 --- a/biscuit/core/migrations/0002_fill_person_model.py +++ b/biscuit/core/migrations/0002_fill_person_model.py @@ -32,7 +32,8 @@ class Migration(migrations.Migration): migrations.AddField( model_name='person', name='guardians', - field=models.ManyToManyField(related_name='children', to=settings.AUTH_USER_MODEL, verbose_name='Guardians / Parents'), + field=models.ManyToManyField( + related_name='children', to=settings.AUTH_USER_MODEL, verbose_name='Guardians / Parents'), ), migrations.AddField( model_name='person', @@ -42,7 +43,8 @@ class Migration(migrations.Migration): migrations.AddField( model_name='person', name='import_ref', - field=models.CharField(blank=True, editable=False, max_length=64, verbose_name='Reference ID of import source'), + field=models.CharField(blank=True, editable=False, max_length=64, + verbose_name='Reference ID of import source'), ), migrations.AddField( model_name='person', @@ -72,7 +74,8 @@ class Migration(migrations.Migration): migrations.AddField( model_name='person', name='sex', - field=models.CharField(blank=True, choices=[('f', 'female'), ('m', 'male')], max_length=1, verbose_name='Sex'), + field=models.CharField(blank=True, choices=[( + 'f', 'female'), ('m', 'male')], max_length=1, verbose_name='Sex'), ), migrations.AddField( model_name='person', diff --git a/biscuit/core/migrations/0003_split_person_user.py b/biscuit/core/migrations/0003_split_person_user.py index 4d92bffa82a37cf0d5633ea7d902e9b988ff99c1..2f09782caf3a5216922806aaf71ba75e23c8476a 100644 --- a/biscuit/core/migrations/0003_split_person_user.py +++ b/biscuit/core/migrations/0003_split_person_user.py @@ -65,7 +65,8 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='person', name='guardians', - field=models.ManyToManyField(related_name='children', to='core.Person', verbose_name='Guardians / Parents'), + field=models.ManyToManyField(related_name='children', + to='core.Person', verbose_name='Guardians / Parents'), ), migrations.AlterField( model_name='person', @@ -80,11 +81,13 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='person', name='mobile_number', - field=phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, region=None, verbose_name='Mobile phone'), + field=phonenumber_field.modelfields.PhoneNumberField( + blank=True, max_length=128, region=None, verbose_name='Mobile phone'), ), migrations.AlterField( model_name='person', name='phone_number', - field=phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, region=None, verbose_name='Home phone'), + field=phonenumber_field.modelfields.PhoneNumberField( + blank=True, max_length=128, region=None, verbose_name='Home phone'), ), ] diff --git a/biscuit/core/migrations/0004_group.py b/biscuit/core/migrations/0004_group.py index 90e5a874e4d43260c3b84fc409508b48c44edc79..77013b2ecc08299c63a1120632c3a8065c20414b 100644 --- a/biscuit/core/migrations/0004_group.py +++ b/biscuit/core/migrations/0004_group.py @@ -13,7 +13,8 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Group', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('id', models.AutoField(auto_created=True, + primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=30, verbose_name='Long name of group')), ('short_name', models.CharField(max_length=8, verbose_name='Short name of group')), ('members', models.ManyToManyField(related_name='member_of', to='core.Person')), diff --git a/biscuit/core/migrations/0006_make_unique.py b/biscuit/core/migrations/0006_make_unique.py index 8c32ba063337fb171b1763965518674be518b0c3..b7df4f31eb6bfc6f053d608ed06545f18a0c3d30 100644 --- a/biscuit/core/migrations/0006_make_unique.py +++ b/biscuit/core/migrations/0006_make_unique.py @@ -23,11 +23,13 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='person', name='import_ref', - field=models.CharField(blank=True, editable=False, max_length=64, unique=True, verbose_name='Reference ID of import source'), + field=models.CharField(blank=True, editable=False, max_length=64, + unique=True, verbose_name='Reference ID of import source'), ), migrations.AlterField( model_name='person', name='short_name', - field=models.CharField(blank=True, max_length=5, unique=True, verbose_name='Short name'), + field=models.CharField(blank=True, max_length=5, unique=True, + verbose_name='Short name'), ), ] diff --git a/biscuit/core/migrations/0008_school_person_group.py b/biscuit/core/migrations/0008_school_person_group.py index 4f72da7e55dda07250713583d04a87aeaa1c84d9..c0755f3f0bd9e7c49715a6c7223025f9a7b8cd57 100644 --- a/biscuit/core/migrations/0008_school_person_group.py +++ b/biscuit/core/migrations/0008_school_person_group.py @@ -14,19 +14,22 @@ class Migration(migrations.Migration): migrations.AddField( model_name='group', name='school', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='core.School'), + field=models.ForeignKey( + default=1, on_delete=django.db.models.deletion.CASCADE, to='core.School'), preserve_default=False, ), migrations.AddField( model_name='person', name='school', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='core.School'), + field=models.ForeignKey( + default=1, on_delete=django.db.models.deletion.CASCADE, to='core.School'), preserve_default=False, ), migrations.AlterField( model_name='person', name='import_ref', - field=models.CharField(blank=True, editable=False, max_length=64, verbose_name='Reference ID of import source'), + field=models.CharField(blank=True, editable=False, max_length=64, + verbose_name='Reference ID of import source'), ), migrations.AlterField( model_name='person', diff --git a/biscuit/core/migrations/0010_user_one_to_one.py b/biscuit/core/migrations/0010_user_one_to_one.py index 438fa5bfb647a71f015d3581956df35436af3bd2..d2f5ca6adc61c78348509296e9a68b5ee2180e5f 100644 --- a/biscuit/core/migrations/0010_user_one_to_one.py +++ b/biscuit/core/migrations/0010_user_one_to_one.py @@ -15,6 +15,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='person', name='user', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='person', to=settings.AUTH_USER_MODEL), + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + related_name='person', to=settings.AUTH_USER_MODEL), ), ] diff --git a/biscuit/core/migrations/0011_default_school.py b/biscuit/core/migrations/0011_default_school.py index 82f040a5d0d4f94eff71bc13539d477a5f287e61..3c97ada1e3b5594fa7670d6bcb6fe318f5934410 100644 --- a/biscuit/core/migrations/0011_default_school.py +++ b/biscuit/core/migrations/0011_default_school.py @@ -15,11 +15,13 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='group', name='school', - field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'), + field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, + on_delete=django.db.models.deletion.CASCADE, to='core.School'), ), migrations.AlterField( model_name='person', name='school', - field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, on_delete=django.db.models.deletion.CASCADE, to='core.School'), + field=models.ForeignKey(default=biscuit.core.util.core_helpers.get_current_school, + on_delete=django.db.models.deletion.CASCADE, to='core.School'), ), ] diff --git a/biscuit/core/migrations/0012_allow_null.py b/biscuit/core/migrations/0012_allow_null.py index 641fca030062b56f68f385cf524005d9df3d6f04..ccf86ccfb7f86637bcef2da558a0e83bedf95edc 100644 --- a/biscuit/core/migrations/0012_allow_null.py +++ b/biscuit/core/migrations/0012_allow_null.py @@ -13,7 +13,8 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='person', name='import_ref', - field=models.CharField(blank=True, editable=False, max_length=64, null=True, verbose_name='Reference ID of import source'), + field=models.CharField(blank=True, editable=False, max_length=64, + null=True, verbose_name='Reference ID of import source'), ), migrations.AlterField( model_name='person', diff --git a/biscuit/core/migrations/0013_person_primary_group.py b/biscuit/core/migrations/0013_person_primary_group.py index 829c612e3927090701930025306d143ce3dfbaf6..88fac71f0a9cb0bf587cdf46aee882bdcc3aa5dd 100644 --- a/biscuit/core/migrations/0013_person_primary_group.py +++ b/biscuit/core/migrations/0013_person_primary_group.py @@ -14,6 +14,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='person', name='primary_group', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.Group'), + field=models.ForeignKey( + null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.Group'), ), ] diff --git a/biscuit/core/migrations/0015_person_photo_crop.py b/biscuit/core/migrations/0015_person_photo_crop.py index 5a15d9b247ec64e9d10559d0e41c9b0f88e9d43d..b33929c85aeddbc5f579cc3bd30e1800062e3942 100644 --- a/biscuit/core/migrations/0015_person_photo_crop.py +++ b/biscuit/core/migrations/0015_person_photo_crop.py @@ -14,11 +14,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='person', name='photo_cropping', - field=image_cropping.fields.ImageRatioField('photo', '600x800', adapt_rotation=False, allow_fullsize=False, free_crop=False, help_text=None, hide_image_field=False, size_warning=True, verbose_name='photo cropping'), + field=image_cropping.fields.ImageRatioField('photo', '600x800', adapt_rotation=False, allow_fullsize=False, + free_crop=False, help_text=None, hide_image_field=False, size_warning=True, verbose_name='photo cropping'), ), migrations.AlterField( model_name='person', name='photo', - field=image_cropping.fields.ImageCropField(blank=True, null=True, upload_to='', verbose_name='Photo'), + field=image_cropping.fields.ImageCropField( + blank=True, null=True, upload_to='', verbose_name='Photo'), ), ] diff --git a/biscuit/core/models.py b/biscuit/core/models.py index ef61eb5f72cbc7dfbfa789ab682e756246f10d73..12b97470bce6f6106d2b125c6f12f6054fc9a7d5 100644 --- a/biscuit/core/models.py +++ b/biscuit/core/models.py @@ -21,7 +21,6 @@ class School(models.Model): name_official = models.CharField(verbose_name=('Official name'), max_length=200, help_text=_( 'Official name of the school, e.g. as given by supervisory authority')) - class Meta: ordering = ['name', 'name_official'] @@ -93,6 +92,7 @@ class Person(SchoolRelated): if self.primary_group: return self.primary_group.short_name + @primary_group_short_name.setter def primary_group_short_name(self, value: str) -> None: """ Sets the primary group related object by diff --git a/biscuit/core/util/core_helpers.py b/biscuit/core/util/core_helpers.py index 4752aec92a3e415a0078cdb8e6db5cf8648d4a81..ba6bc421ee9bcbf8e0525490ff680e48309d1c65 100644 --- a/biscuit/core/util/core_helpers.py +++ b/biscuit/core/util/core_helpers.py @@ -60,7 +60,7 @@ def get_current_school() -> Optional: else: # Use first school warn('No school set, using first known school.', RuntimeWarning) - return School.objects.first() + return School.objects.first() # Raise an exception because not finding a school wreaks havoc raise RuntimeError('No school set or found. Check your database.') diff --git a/biscuit/core/views.py b/biscuit/core/views.py index e10a12591fd8da948bb72405bfeb7fe952d42b54..69e15353b470f634531a6896c110ac241de000ae 100644 --- a/biscuit/core/views.py +++ b/biscuit/core/views.py @@ -26,7 +26,8 @@ def error_handler(status: int) -> Callable[..., HttpResponse]: context['status'] = status if status == 404: - context['message'] = _('This page does not exist. If you were redirected by a link on an external page, it is possible that that link was outdated.') + context['message'] = _( + 'This page does not exist. If you were redirected by a link on an external page, it is possible that that link was outdated.') context['caption'] = _('Page not found') elif status == 500: context['caption'] = _('Internal server error') @@ -172,7 +173,6 @@ def edit_group(request: HttpRequest, id_: int) -> HttpResponse: edit_group_form = EditGroupForm(request.POST or None, instance=group) - if request.method == 'POST': if edit_group_form.is_valid(): edit_group_form.save(commit=True)