-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #24 from daniviga/bookshelf
Implement a bookshelf
- Loading branch information
Showing
41 changed files
with
947 additions
and
94 deletions.
There are no files selected for viewing
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
from django.contrib import admin | ||
from adminsortable2.admin import SortableAdminBase, SortableInlineAdminMixin | ||
|
||
from bookshelf.models import BookProperty, BookImage, Book, Author, Publisher | ||
|
||
|
||
class BookImageInline(SortableInlineAdminMixin, admin.TabularInline): | ||
model = BookImage | ||
min_num = 0 | ||
extra = 0 | ||
readonly_fields = ("image_thumbnail",) | ||
classes = ["collapse"] | ||
|
||
|
||
class BookPropertyInline(admin.TabularInline): | ||
model = BookProperty | ||
min_num = 0 | ||
extra = 0 | ||
|
||
|
||
@admin.register(Book) | ||
class BookAdmin(SortableAdminBase, admin.ModelAdmin): | ||
inlines = (BookImageInline, BookPropertyInline,) | ||
list_display = ( | ||
"title", | ||
"get_authors", | ||
"get_publisher", | ||
"publication_year", | ||
"number_of_pages" | ||
) | ||
search_fields = ("title", "publisher__name", "authors__last_name") | ||
list_filter = ("publisher__name", "authors") | ||
|
||
@admin.display(description="Publisher") | ||
def get_publisher(self, obj): | ||
return obj.publisher.name | ||
|
||
@admin.display(description="Authors") | ||
def get_authors(self, obj): | ||
return ", ".join(a.short_name() for a in obj.authors.all()) | ||
|
||
|
||
@admin.register(Author) | ||
class AuthorAdmin(admin.ModelAdmin): | ||
search_fields = ("first_name", "last_name",) | ||
list_filter = ("last_name",) | ||
|
||
|
||
@admin.register(Publisher) | ||
class PublisherAdmin(admin.ModelAdmin): | ||
list_display = ("name", "country") | ||
search_fields = ("name",) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
from django.apps import AppConfig | ||
|
||
|
||
class BookshelfConfig(AppConfig): | ||
default_auto_field = "django.db.models.BigAutoField" | ||
name = "bookshelf" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
# Generated by Django 4.2.5 on 2023-10-01 20:16 | ||
|
||
import ckeditor_uploader.fields | ||
from django.db import migrations, models | ||
import django.db.models.deletion | ||
import uuid | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
initial = True | ||
|
||
dependencies = [ | ||
("metadata", "0012_alter_decoder_manufacturer_decoderdocument"), | ||
] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name="Author", | ||
fields=[ | ||
( | ||
"id", | ||
models.BigAutoField( | ||
auto_created=True, | ||
primary_key=True, | ||
serialize=False, | ||
verbose_name="ID", | ||
), | ||
), | ||
("first_name", models.CharField(max_length=100)), | ||
("last_name", models.CharField(max_length=100)), | ||
], | ||
), | ||
migrations.CreateModel( | ||
name="Book", | ||
fields=[ | ||
( | ||
"uuid", | ||
models.UUIDField( | ||
default=uuid.uuid4, | ||
editable=False, | ||
primary_key=True, | ||
serialize=False, | ||
), | ||
), | ||
("title", models.CharField(max_length=200)), | ||
("ISBN", models.CharField(max_length=13, unique=True)), | ||
("publication_year", models.SmallIntegerField(blank=True, null=True)), | ||
("purchase_date", models.DateField(blank=True, null=True)), | ||
("notes", ckeditor_uploader.fields.RichTextUploadingField(blank=True)), | ||
("creation_time", models.DateTimeField(auto_now_add=True)), | ||
("updated_time", models.DateTimeField(auto_now=True)), | ||
("authors", models.ManyToManyField(to="bookshelf.author")), | ||
], | ||
), | ||
migrations.CreateModel( | ||
name="Publisher", | ||
fields=[ | ||
( | ||
"id", | ||
models.BigAutoField( | ||
auto_created=True, | ||
primary_key=True, | ||
serialize=False, | ||
verbose_name="ID", | ||
), | ||
), | ||
("name", models.CharField(max_length=200)), | ||
("website", models.URLField()), | ||
], | ||
), | ||
migrations.CreateModel( | ||
name="BookProperty", | ||
fields=[ | ||
( | ||
"id", | ||
models.BigAutoField( | ||
auto_created=True, | ||
primary_key=True, | ||
serialize=False, | ||
verbose_name="ID", | ||
), | ||
), | ||
("value", models.CharField(max_length=256)), | ||
( | ||
"book", | ||
models.ForeignKey( | ||
on_delete=django.db.models.deletion.CASCADE, | ||
related_name="property", | ||
to="bookshelf.book", | ||
), | ||
), | ||
( | ||
"property", | ||
models.ForeignKey( | ||
on_delete=django.db.models.deletion.CASCADE, | ||
to="metadata.property", | ||
), | ||
), | ||
], | ||
options={ | ||
"verbose_name_plural": "Properties", | ||
}, | ||
), | ||
migrations.AddField( | ||
model_name="book", | ||
name="publisher", | ||
field=models.ForeignKey( | ||
on_delete=django.db.models.deletion.CASCADE, to="bookshelf.publisher" | ||
), | ||
), | ||
migrations.AddField( | ||
model_name="book", | ||
name="tags", | ||
field=models.ManyToManyField( | ||
blank=True, related_name="bookshelf", to="metadata.tag" | ||
), | ||
), | ||
] |
142 changes: 142 additions & 0 deletions
142
ram/bookshelf/migrations/0002_book_language_book_numbers_of_pages_and_more.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
# Generated by Django 4.2.5 on 2023-10-01 21:33 | ||
|
||
from django.db import migrations, models | ||
import django_countries.fields | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
("bookshelf", "0001_initial"), | ||
] | ||
|
||
operations = [ | ||
migrations.AddField( | ||
model_name="book", | ||
name="language", | ||
field=models.CharField( | ||
choices=[ | ||
("af", "Afrikaans"), | ||
("ar", "Arabic"), | ||
("ar-dz", "Algerian Arabic"), | ||
("ast", "Asturian"), | ||
("az", "Azerbaijani"), | ||
("bg", "Bulgarian"), | ||
("be", "Belarusian"), | ||
("bn", "Bengali"), | ||
("br", "Breton"), | ||
("bs", "Bosnian"), | ||
("ca", "Catalan"), | ||
("ckb", "Central Kurdish (Sorani)"), | ||
("cs", "Czech"), | ||
("cy", "Welsh"), | ||
("da", "Danish"), | ||
("de", "German"), | ||
("dsb", "Lower Sorbian"), | ||
("el", "Greek"), | ||
("en", "English"), | ||
("en-au", "Australian English"), | ||
("en-gb", "British English"), | ||
("eo", "Esperanto"), | ||
("es", "Spanish"), | ||
("es-ar", "Argentinian Spanish"), | ||
("es-co", "Colombian Spanish"), | ||
("es-mx", "Mexican Spanish"), | ||
("es-ni", "Nicaraguan Spanish"), | ||
("es-ve", "Venezuelan Spanish"), | ||
("et", "Estonian"), | ||
("eu", "Basque"), | ||
("fa", "Persian"), | ||
("fi", "Finnish"), | ||
("fr", "French"), | ||
("fy", "Frisian"), | ||
("ga", "Irish"), | ||
("gd", "Scottish Gaelic"), | ||
("gl", "Galician"), | ||
("he", "Hebrew"), | ||
("hi", "Hindi"), | ||
("hr", "Croatian"), | ||
("hsb", "Upper Sorbian"), | ||
("hu", "Hungarian"), | ||
("hy", "Armenian"), | ||
("ia", "Interlingua"), | ||
("id", "Indonesian"), | ||
("ig", "Igbo"), | ||
("io", "Ido"), | ||
("is", "Icelandic"), | ||
("it", "Italian"), | ||
("ja", "Japanese"), | ||
("ka", "Georgian"), | ||
("kab", "Kabyle"), | ||
("kk", "Kazakh"), | ||
("km", "Khmer"), | ||
("kn", "Kannada"), | ||
("ko", "Korean"), | ||
("ky", "Kyrgyz"), | ||
("lb", "Luxembourgish"), | ||
("lt", "Lithuanian"), | ||
("lv", "Latvian"), | ||
("mk", "Macedonian"), | ||
("ml", "Malayalam"), | ||
("mn", "Mongolian"), | ||
("mr", "Marathi"), | ||
("ms", "Malay"), | ||
("my", "Burmese"), | ||
("nb", "Norwegian Bokmål"), | ||
("ne", "Nepali"), | ||
("nl", "Dutch"), | ||
("nn", "Norwegian Nynorsk"), | ||
("os", "Ossetic"), | ||
("pa", "Punjabi"), | ||
("pl", "Polish"), | ||
("pt", "Portuguese"), | ||
("pt-br", "Brazilian Portuguese"), | ||
("ro", "Romanian"), | ||
("ru", "Russian"), | ||
("sk", "Slovak"), | ||
("sl", "Slovenian"), | ||
("sq", "Albanian"), | ||
("sr", "Serbian"), | ||
("sr-latn", "Serbian Latin"), | ||
("sv", "Swedish"), | ||
("sw", "Swahili"), | ||
("ta", "Tamil"), | ||
("te", "Telugu"), | ||
("tg", "Tajik"), | ||
("th", "Thai"), | ||
("tk", "Turkmen"), | ||
("tr", "Turkish"), | ||
("tt", "Tatar"), | ||
("udm", "Udmurt"), | ||
("uk", "Ukrainian"), | ||
("ur", "Urdu"), | ||
("uz", "Uzbek"), | ||
("vi", "Vietnamese"), | ||
("zh-hans", "Simplified Chinese"), | ||
("zh-hant", "Traditional Chinese"), | ||
], | ||
default="en", | ||
max_length=7, | ||
), | ||
), | ||
migrations.AddField( | ||
model_name="book", | ||
name="numbers_of_pages", | ||
field=models.SmallIntegerField(blank=True, null=True), | ||
), | ||
migrations.AddField( | ||
model_name="publisher", | ||
name="country", | ||
field=django_countries.fields.CountryField(blank=True, max_length=2), | ||
), | ||
migrations.AlterField( | ||
model_name="book", | ||
name="ISBN", | ||
field=models.CharField(blank=True, max_length=13), | ||
), | ||
migrations.AlterField( | ||
model_name="publisher", | ||
name="website", | ||
field=models.URLField(blank=True), | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
# Generated by Django 4.2.5 on 2023-10-02 10:36 | ||
|
||
from django.db import migrations, models | ||
import django.db.models.deletion | ||
import ram.utils | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
("bookshelf", "0002_book_language_book_numbers_of_pages_and_more"), | ||
] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name="BookImage", | ||
fields=[ | ||
( | ||
"id", | ||
models.BigAutoField( | ||
auto_created=True, | ||
primary_key=True, | ||
serialize=False, | ||
verbose_name="ID", | ||
), | ||
), | ||
("order", models.PositiveIntegerField(default=0)), | ||
( | ||
"image", | ||
models.ImageField( | ||
blank=True, | ||
null=True, | ||
storage=ram.utils.DeduplicatedStorage, | ||
upload_to="images/books/", | ||
), | ||
), | ||
( | ||
"book", | ||
models.ForeignKey( | ||
on_delete=django.db.models.deletion.CASCADE, | ||
related_name="image", | ||
to="bookshelf.book", | ||
), | ||
), | ||
], | ||
options={ | ||
"ordering": ["order"], | ||
"abstract": False, | ||
}, | ||
), | ||
] |
18 changes: 18 additions & 0 deletions
18
ram/bookshelf/migrations/0004_rename_numbers_of_pages_book_number_of_pages.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# Generated by Django 4.2.5 on 2023-10-02 20:38 | ||
|
||
from django.db import migrations | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
("bookshelf", "0003_bookimage"), | ||
] | ||
|
||
operations = [ | ||
migrations.RenameField( | ||
model_name="book", | ||
old_name="numbers_of_pages", | ||
new_name="number_of_pages", | ||
), | ||
] |
Oops, something went wrong.