mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-05-20 17:28:55 +00:00
149 lines
4.8 KiB
Python
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",
|
|
),
|
|
]
|