Magazine UI (#54)

* Work in progress to implement magazines and issues UI

* Fully implement UI for magazines
This commit is contained in:
2025-12-10 22:58:39 +01:00
committed by GitHub
parent 6b10051bc4
commit 39b0a9378b
14 changed files with 646 additions and 23 deletions

View File

@@ -43,8 +43,8 @@ class BaseBook(BaseModel):
ISBN = models.CharField(max_length=17, blank=True) # 13 + dashes
language = models.CharField(
max_length=7,
choices=settings.LANGUAGES,
default='en'
choices=sorted(settings.LANGUAGES, key=lambda s: s[1]),
default="en",
)
number_of_pages = models.SmallIntegerField(null=True, blank=True)
publication_year = models.SmallIntegerField(null=True, blank=True)
@@ -81,6 +81,15 @@ def book_image_upload(instance, filename):
)
def magazine_image_upload(instance, filename):
return os.path.join(
"images",
"magazines",
str(instance.uuid),
filename
)
class BaseBookImage(Image):
book = models.ForeignKey(
BaseBook, on_delete=models.CASCADE, related_name="image"
@@ -163,12 +172,12 @@ class Magazine(BaseModel):
ISBN = models.CharField(max_length=17, blank=True) # 13 + dashes
image = models.ImageField(
blank=True,
upload_to=book_image_upload,
upload_to=magazine_image_upload,
storage=DeduplicatedStorage,
)
language = models.CharField(
max_length=7,
choices=settings.LANGUAGES,
choices=sorted(settings.LANGUAGES, key=lambda s: s[1]),
default='en'
)
tags = models.ManyToManyField(
@@ -192,8 +201,8 @@ class Magazine(BaseModel):
def get_absolute_url(self):
return reverse(
"bookshelf_item",
kwargs={"selector": "magazine", "uuid": self.uuid}
"magazine",
kwargs={"uuid": self.uuid}
)
@@ -224,3 +233,16 @@ class MagazineIssue(BaseBook):
def preview(self):
return self.image.first().image_thumbnail(100)
@property
def publisher(self):
return self.magazine.publisher
def get_absolute_url(self):
return reverse(
"issue",
kwargs={
"uuid": self.uuid,
"magazine": self.magazine.uuid
}
)