BookDataModel: add merged_into field

This commit is contained in:
Bart Schuurmans 2024-02-22 10:07:44 +01:00
parent 1fabe51261
commit 6b672eda44
3 changed files with 52 additions and 3 deletions

View file

@ -22,6 +22,7 @@ class BookData(ActivityObject):
aasin: Optional[str] = None
isfdb: Optional[str] = None
lastEditedBy: Optional[str] = None
mergedInto: Optional[str] = None
# pylint: disable=invalid-name

View file

@ -0,0 +1,33 @@
# Generated by Django 3.2.24 on 2024-02-22 09:05
import bookwyrm.models.fields
from django.db import migrations
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0195_alter_user_preferred_language"),
]
operations = [
migrations.AddField(
model_name="author",
name="merged_into",
field=bookwyrm.models.fields.ForeignKey(
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="bookwyrm.author",
),
),
migrations.AddField(
model_name="book",
name="merged_into",
field=bookwyrm.models.fields.ForeignKey(
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="bookwyrm.book",
),
),
]

View file

@ -1,4 +1,5 @@
""" database schema for books and shelves """
from itertools import chain
import re
from typing import Any
@ -71,6 +72,11 @@ class BookDataModel(ObjectMixin, BookWyrmModel):
on_delete=models.PROTECT,
null=True,
)
merged_into = fields.ForeignKey(
"self",
on_delete=models.PROTECT,
null=True,
)
@property
def openlibrary_link(self):
@ -190,9 +196,13 @@ class Book(BookDataModel):
"""properties of this edition, as a string"""
items = [
self.physical_format if hasattr(self, "physical_format") else None,
f"{self.languages[0]} language"
if self.languages and self.languages[0] and self.languages[0] != "English"
else None,
(
f"{self.languages[0]} language"
if self.languages
and self.languages[0]
and self.languages[0] != "English"
else None
),
str(self.published_date.year) if self.published_date else None,
", ".join(self.publishers) if hasattr(self, "publishers") else None,
]
@ -252,6 +262,11 @@ class Work(OrderedCollectionPageMixin, Book):
edition.save()
return super().save(*args, **kwargs)
@property
def editions(self):
"""exclude editions that have been merged"""
return self.editions.filter(merged_into__isnull=True)
@property
def default_edition(self):
"""in case the default edition is not set"""