mirror of
https://github.com/daniviga/django-ram.git
synced 2025-08-04 13:17:50 +02:00
WIP: implement catalogue type of books
This commit is contained in:
@@ -10,6 +10,7 @@ from tinymce import models as tinymce
|
||||
from metadata.models import Tag
|
||||
from ram.utils import DeduplicatedStorage
|
||||
from ram.models import BaseModel, Image, PropertyInstance
|
||||
from metadata.models import Scale, Manufacturer
|
||||
|
||||
|
||||
class Publisher(models.Model):
|
||||
@@ -38,10 +39,7 @@ class Author(models.Model):
|
||||
return f"{self.last_name} {self.first_name[0]}."
|
||||
|
||||
|
||||
class Book(BaseModel):
|
||||
title = models.CharField(max_length=200)
|
||||
authors = models.ManyToManyField(Author, blank=True)
|
||||
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
|
||||
class BaseBook(BaseModel):
|
||||
ISBN = models.CharField(max_length=17, blank=True) # 13 + dashes
|
||||
language = models.CharField(
|
||||
max_length=7,
|
||||
@@ -56,15 +54,6 @@ class Book(BaseModel):
|
||||
Tag, related_name="bookshelf", blank=True
|
||||
)
|
||||
|
||||
class Meta:
|
||||
ordering = ["title"]
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
def publisher_name(self):
|
||||
return self.publisher.name
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse("book", kwargs={"uuid": self.uuid})
|
||||
|
||||
@@ -75,7 +64,7 @@ class Book(BaseModel):
|
||||
),
|
||||
ignore_errors=True
|
||||
)
|
||||
super(Book, self).delete(*args, **kwargs)
|
||||
super(BaseBook, self).delete(*args, **kwargs)
|
||||
|
||||
|
||||
def book_image_upload(instance, filename):
|
||||
@@ -87,9 +76,9 @@ def book_image_upload(instance, filename):
|
||||
)
|
||||
|
||||
|
||||
class BookImage(Image):
|
||||
class BaseBookImage(Image):
|
||||
book = models.ForeignKey(
|
||||
Book, on_delete=models.CASCADE, related_name="image"
|
||||
BaseBook, on_delete=models.CASCADE, related_name="image"
|
||||
)
|
||||
image = models.ImageField(
|
||||
upload_to=book_image_upload,
|
||||
@@ -97,11 +86,44 @@ class BookImage(Image):
|
||||
)
|
||||
|
||||
|
||||
class BookProperty(PropertyInstance):
|
||||
class BaseBookProperty(PropertyInstance):
|
||||
book = models.ForeignKey(
|
||||
Book,
|
||||
BaseBook,
|
||||
on_delete=models.CASCADE,
|
||||
null=False,
|
||||
blank=False,
|
||||
related_name="property",
|
||||
)
|
||||
|
||||
|
||||
class Book(BaseBook):
|
||||
title = models.CharField(max_length=200)
|
||||
authors = models.ManyToManyField(Author, blank=True)
|
||||
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
|
||||
|
||||
class Meta:
|
||||
ordering = ["title"]
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
def publisher_name(self):
|
||||
return self.publisher.name
|
||||
|
||||
|
||||
class Catalog(BaseBook):
|
||||
manufacturer = models.ForeignKey(
|
||||
Manufacturer,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
blank=True,
|
||||
)
|
||||
years = models.CharField(max_length=12)
|
||||
scales = models.ManyToManyField(Scale)
|
||||
|
||||
class Meta:
|
||||
ordering = ["manufacturer", "publication_year"]
|
||||
|
||||
def __str__(self):
|
||||
scales = "/".join([s.scale for s in self.scales.all()])
|
||||
return "%s %s %s" % (self.manufacturer.name, self.years, scales)
|
||||
|
Reference in New Issue
Block a user