mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-01 19:32:26 +02:00
83 lines
2.9 KiB
Python
83 lines
2.9 KiB
Python
from django.conf import settings
|
|
from django.db import migrations, models
|
|
|
|
import base36
|
|
import random
|
|
|
|
def random_code():
|
|
return base36.dumps(
|
|
random.randint(pow(36, code_length - 2), pow(36, code_length - 1) - 1)
|
|
)
|
|
|
|
# Migrate existing GroupedOrder `place` to the new `place` table
|
|
def link_existing_place(apps, schema_editor):
|
|
GroupedOrder = apps.get_model('order', 'GroupedOrder')
|
|
Place = apps.get_model('order', 'Place')
|
|
for grouped_order in GroupedOrder.objects.all():
|
|
if grouped_order.place:
|
|
# Generate new random code for this existing place
|
|
code = random_code()
|
|
while Place.objects.all().filter(code=code):
|
|
# Random code already exists, try a new random code
|
|
code = random_code()
|
|
|
|
place = Place.objects.create(
|
|
name=grouped_order.place,
|
|
code=code,
|
|
)
|
|
|
|
grouped_order.places.add(place)
|
|
grouped_order.save()
|
|
|
|
class Migration(migrations.Migration):
|
|
dependencies = [
|
|
("order", "0029_set_phone_mandatory_for_existing_orders"),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name="Place",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.BigAutoField(
|
|
auto_created=True,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
("name", models.CharField(max_length=100, verbose_name="Nom du lieu de distribution")),
|
|
("code", models.CharField(max_length=20, verbose_name="Identifiant unique du lieu (raccourci)", unique=True)),
|
|
("orga", models.ForeignKey(on_delete=models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Organisateur·ice')),
|
|
("description", models.TextField(blank=True, null=True, verbose_name="Description")),
|
|
],
|
|
),
|
|
migrations.AddField(
|
|
model_name="groupedorder",
|
|
name="places",
|
|
field=models.ManyToManyField(
|
|
to="order.place",
|
|
verbose_name="Lieux de distribution",
|
|
related_name="orders",
|
|
)
|
|
),
|
|
migrations.RunPython(link_existing_place),
|
|
migrations.RemoveField(
|
|
model_name='groupedorder',
|
|
name='place',
|
|
),
|
|
migrations.AddField(
|
|
model_name="order",
|
|
name="place",
|
|
field=models.ForeignKey(blank=True, null=True, on_delete=models.deletion.CASCADE, to='order.place'),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name="groupedorder",
|
|
index=models.Index(fields=["code"], name="order_group_code_50902d_idx"),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name="place",
|
|
index=models.Index(fields=["code"], name="order_place_code_4e2b27_idx"),
|
|
),
|
|
]
|