Skip to content
Snippets Groups Projects
Commit 47bbf059 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch '633-get-returned-more-than-one-personpreferencemodel-ticket-75959' into 'master'

Resolve "get() returned more than one PersonPreferenceModel [Ticket#75959]"

Closes #633

See merge request !937
parents 0d102d9c 43fc05cd
No related branches found
No related tags found
1 merge request!937Resolve "get() returned more than one PersonPreferenceModel [Ticket#75959]"
Pipeline #52023 canceled
......@@ -28,6 +28,7 @@ Fixed
* PWA theme colour defaulted to red
* Form for editing group type displayed irrelevant fields
* Permission groups could get outdated if re-assigning a user account to a different person
* User preferences didn't work correctly sometimes due to race conditions.
`2.7`_ - 2022-01-24
-------------------
......
# Generated by Django 3.2.11 on 2022-01-27 18:52
from email.headerregistry import Group
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sites', '0002_alter_domain_unique'),
('core', '0034_invite_permission'),
]
def _migrate_preference_models_to_unique(apps, schema_editor):
GroupPreferenceModel = apps.get_model("core", "GroupPreferenceModel")
PersonPreferenceModel = apps.get_model("core", "PersonPreferenceModel")
SitePreferenceModel = apps.get_model("core", "SitePreferenceModel")
from dynamic_preferences import BasePreferenceModel
models = [GroupPreferenceModel, PersonPreferenceModel, SitePreferenceModel]
for model in models:
duplicates = {}
db_alias = schema_editor.connection.alias
for obj in model.objects.using(db_alias).all():
key = f"{obj.instance.pk}__{obj.section}__{obj.name}"
duplicates.setdefault(key, [])
duplicates[key].append(obj)
for key, objs in duplicates.items():
if len(objs) > 1:
found = False
for obj in objs:
if BasePreferenceModel.get_value(obj) == BasePreferenceModel.preference(obj).default or found:
obj.delete()
else:
found = True
operations = [
migrations.RunPython(_migrate_preference_models_to_unique),
migrations.AlterUniqueTogether(
name='grouppreferencemodel',
unique_together={('instance', 'section', 'name')},
),
migrations.AlterUniqueTogether(
name='personpreferencemodel',
unique_together={('instance', 'section', 'name')},
),
migrations.AlterUniqueTogether(
name='sitepreferencemodel',
unique_together={('instance', 'section', 'name')},
),
]
......@@ -1082,7 +1082,7 @@ class SitePreferenceModel(PerInstancePreferenceModel, PureDjangoModel):
instance = models.ForeignKey(Site, on_delete=models.CASCADE)
class Meta:
class Meta(PerInstancePreferenceModel.Meta):
app_label = "core"
......@@ -1091,7 +1091,7 @@ class PersonPreferenceModel(PerInstancePreferenceModel, PureDjangoModel):
instance = models.ForeignKey(Person, on_delete=models.CASCADE)
class Meta:
class Meta(PerInstancePreferenceModel.Meta):
app_label = "core"
......@@ -1100,7 +1100,7 @@ class GroupPreferenceModel(PerInstancePreferenceModel, PureDjangoModel):
instance = models.ForeignKey(Group, on_delete=models.CASCADE)
class Meta:
class Meta(PerInstancePreferenceModel.Meta):
app_label = "core"
......
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