Browse Source

slug base search for library object

master
Mohsen Taba 1 month ago
parent
commit
c9fd373b01
  1. 2
      apps/library/doc.py
  2. 13
      apps/library/models.py
  3. 2
      apps/library/urls.py
  4. 1
      apps/library/views.py

2
apps/library/doc.py

@ -186,7 +186,7 @@ book_detail_swagger = swagger_auto_schema(
- Categories and collections the book belongs to - Categories and collections the book belongs to
- Number of pages - Number of pages
The book is specified by its ID in the URL path.
The book is specified by its slug in the URL path.
""", """,
operation_summary="Get Book Detail", operation_summary="Get Book Detail",
tags=["Dobodbi - Library"], tags=["Dobodbi - Library"],

13
apps/library/models.py

@ -6,6 +6,7 @@ from django.conf import settings
from filer.fields.image import FilerImageField from filer.fields.image import FilerImageField
from dj_language.field import LanguageField from dj_language.field import LanguageField
from utils import generate_slug_for_model from utils import generate_slug_for_model
from utils.slug import generate_smart_slug
from apps.account.models import User from apps.account.models import User
@ -37,8 +38,8 @@ class BookCollection(models.Model):
verbose_name_plural = _('Book Collections') verbose_name_plural = _('Book Collections')
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if not self.slug:
self.slug = generate_slug_for_model(BookCollection, self.title)
if not self.slug or not self.slug.strip():
self.slug = generate_smart_slug(self.title, BookCollection, instance=self)
super().save(*args, **kwargs) super().save(*args, **kwargs)
@ -78,8 +79,8 @@ class Category(models.Model):
return self.title return self.title
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if not self.slug:
self.slug = generate_slug_for_model(Category, self.title)
if not self.slug or not self.slug.strip():
self.slug = generate_smart_slug(self.title, Category, instance=self)
super().save(*args, **kwargs) super().save(*args, **kwargs)
@property @property
@ -147,8 +148,8 @@ class Book(models.Model):
return None return None
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if not self.slug:
self.slug = generate_slug_for_model(Book, self.title)
if not self.slug or not self.slug.strip():
self.slug = generate_smart_slug(self.title, Book, instance=self)
super().save(*args, **kwargs) super().save(*args, **kwargs)

2
apps/library/urls.py

@ -15,7 +15,7 @@ urlpatterns = [
path('pinned-collections/', PinnedBookCollectionListView.as_view(), name='pinned-collection-list'), path('pinned-collections/', PinnedBookCollectionListView.as_view(), name='pinned-collection-list'),
path('collections/', MiddleBookCollectionListView.as_view(), name='collection-list'), path('collections/', MiddleBookCollectionListView.as_view(), name='collection-list'),
path('books/', BookListView.as_view(), name='book-list'), path('books/', BookListView.as_view(), name='book-list'),
path('books/<int:pk>/', BookDetailView.as_view(), name='book-detail'),
path('books/<str:slug>/', BookDetailView.as_view(), name='book-detail'),
path('books/downloaded/', DownloadedBooksListView.as_view(), name='downloaded-books-list'), path('books/downloaded/', DownloadedBooksListView.as_view(), name='downloaded-books-list'),
path('books/download/', BookDownloadCreateAPIView.as_view(), name='book-download'), path('books/download/', BookDownloadCreateAPIView.as_view(), name='book-download'),
] ]

1
apps/library/views.py

@ -189,6 +189,7 @@ class BookDetailView(RetrieveAPIView):
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)
authentication_classes = [TokenAuthentication] authentication_classes = [TokenAuthentication]
queryset = Book.objects.filter(status=True) queryset = Book.objects.filter(status=True)
lookup_field = 'slug'
@book_detail_swagger @book_detail_swagger
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):

Loading…
Cancel
Save