mirror of
https://github.com/ae-utbm/sith.git
synced 2024-12-23 00:01:16 +00:00
54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
# Generated by Django 4.2.17 on 2024-12-08 13:30
|
|
from operator import attrgetter
|
|
|
|
import django.db.models.deletion
|
|
from django.db import migrations, models
|
|
from django.db.migrations.state import StateApps
|
|
from django.db.models import Count
|
|
|
|
|
|
def delete_duplicates(apps: StateApps, schema_editor):
|
|
"""Delete cards of users with more than one student cards.
|
|
|
|
For all users who have more than one registered student card, all
|
|
the cards except the last one are deleted.
|
|
"""
|
|
Customer = apps.get_model("counter", "Customer")
|
|
StudentCard = apps.get_model("counter", "StudentCard")
|
|
customers = (
|
|
Customer.objects.annotate(nb_cards=Count("student_cards"))
|
|
.filter(nb_cards__gt=1)
|
|
.prefetch_related("student_cards")
|
|
)
|
|
to_delete = [
|
|
card.id
|
|
for customer in customers
|
|
for card in sorted(customer.student_cards.all(), key=attrgetter("id"))[:-1]
|
|
]
|
|
StudentCard.objects.filter(id__in=to_delete).delete()
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
dependencies = [("counter", "0025_remove_product_parent_product_and_more")]
|
|
|
|
operations = [
|
|
migrations.RunPython(delete_duplicates, migrations.RunPython.noop),
|
|
migrations.AlterField(
|
|
model_name="studentcard",
|
|
name="customer",
|
|
field=models.OneToOneField(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="student_card",
|
|
to="counter.customer",
|
|
verbose_name="student card",
|
|
),
|
|
),
|
|
migrations.AlterModelOptions(
|
|
name="studentcard",
|
|
options={
|
|
"verbose_name": "student card",
|
|
"verbose_name_plural": "student cards",
|
|
},
|
|
),
|
|
]
|