bookwyrm/bookwyrm/migrations/0206_series_model.py
2024-04-26 12:53:04 +02:00

149 lines
4.8 KiB
Python

# Generated by Django 3.2.23 on 2024-02-04 20:27
import bookwyrm.models.fields
from django.db import migrations, models
import django.db.models.deletion
def make_series(apps, schema_editor):
Edition = apps.get_model("bookwyrm", "Edition")
Series = apps.get_model("bookwyrm", "Series")
SeriesBook = apps.get_model("bookwyrm", "SeriesBook")
db_alias = schema_editor.connection.alias
with_series = (
Edition.objects.using(db_alias)
.exclude(series_name__isnull=True)
.exclude(series_name__exact="")
.order_by("series_name", "series_number")
)
for edition in with_series:
# TODO: Try to parse number from series_name if series_number is empty?
series, _ = Series.objects.using(db_alias).get_or_create(
name=edition.series_name,
authors=edition.authors.all(),
)
SeriesBook.objects.using(db_alias).create(
book=edition, series=series, number=edition.series_number
)
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0205_merge_20240413_0232.py"),
]
operations = [
migrations.RenameField(
model_name="book",
old_name="series",
new_name="series_name",
),
migrations.CreateModel(
name="Series",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created_date", models.DateTimeField(auto_now_add=True)),
("updated_date", models.DateTimeField(auto_now=True)),
(
"remote_id",
bookwyrm.models.fields.RemoteIdField(
max_length=255,
null=True,
validators=[bookwyrm.models.fields.validate_remote_id],
),
),
("name", bookwyrm.models.fields.CharField(max_length=100)),
(
"authors",
bookwyrm.models.fields.ManyToManyField(to="bookwyrm.Author"),
),
],
options={
"abstract": False,
},
),
migrations.CreateModel(
name="SeriesBook",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("created_date", models.DateTimeField(auto_now_add=True)),
("updated_date", models.DateTimeField(auto_now=True)),
(
"remote_id",
bookwyrm.models.fields.RemoteIdField(
max_length=255,
null=True,
validators=[bookwyrm.models.fields.validate_remote_id],
),
),
(
"number",
bookwyrm.models.fields.CharField(
blank=True, max_length=255, null=True
),
),
(
"book",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT, to="bookwyrm.book"
),
),
(
"series",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to="bookwyrm.series",
),
),
],
options={
"ordering": ["-number"],
"unique_together": {("book", "series")},
},
),
migrations.AddField(
model_name="series",
name="books",
field=bookwyrm.models.fields.ManyToManyField(
related_name="series_books",
through="bookwyrm.SeriesBook",
to="bookwyrm.Book",
),
),
migrations.AddField(
model_name="book",
name="series",
field=models.ManyToManyField(
through="bookwyrm.SeriesBook", to="bookwyrm.Series"
),
),
migrations.RunPython(make_series), # TODO: reverse_code
migrations.RemoveField(
model_name="book",
name="series_number",
),
migrations.RemoveField(
model_name="book",
name="series_name",
),
]