Browse Source

book attribute endpoints added.

master
Mohsen Taba 5 months ago
parent
commit
89edbbc2d1
  1. 29
      apps/hadis/migrations/0037_remove_bookattribute_book_references_and_more.py
  2. 9
      apps/hadis/models/reference.py
  3. 13
      apps/hadis/serializers/reference.py
  4. 3
      apps/hadis/urls.py
  5. 22
      apps/hadis/views/reference.py

29
apps/hadis/migrations/0037_remove_bookattribute_book_references_and_more.py

@ -0,0 +1,29 @@
# Generated by Django 5.2.9 on 2025-12-14 15:46
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("hadis", "0036_transmitters_generation_and_more"),
]
operations = [
migrations.RemoveField(
model_name="bookattribute",
name="book_references",
),
migrations.AddField(
model_name="bookattribute",
name="book_reference",
field=models.ForeignKey(
default=None,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="attributes",
to="hadis.bookreference",
verbose_name="book attribute",
),
),
]

9
apps/hadis/models/reference.py

@ -92,13 +92,14 @@ class BookAttribute(models.Model):
""" """
title = models.CharField(max_length=255, verbose_name=_('title')) title = models.CharField(max_length=255, verbose_name=_('title'))
value = models.CharField(max_length=500, verbose_name=_('value')) value = models.CharField(max_length=500, verbose_name=_('value'))
book_references = models.ManyToManyField(
book_reference = models.ForeignKey(
BookReference, BookReference,
on_delete=models.CASCADE,
related_name='attributes', related_name='attributes',
verbose_name=_('book references'),
blank=True
verbose_name=_('book attribute'),
default = None,
null = True
) )
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at')) created_at = models.DateTimeField(auto_now_add=True, verbose_name=_('created at'))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at')) updated_at = models.DateTimeField(auto_now=True, verbose_name=_('updated at'))

13
apps/hadis/serializers/reference.py

@ -1,7 +1,7 @@
from rest_framework import serializers from rest_framework import serializers
from ..serializers import HadisListSerializer from ..serializers import HadisListSerializer
from ..models import BookReference , BookAuthor , BookReferenceImage, HadisReference
from ..models import BookReference , BookAuthor , BookReferenceImage, HadisReference , BookAttribute
class BookAuthorSerializer(serializers.ModelSerializer): class BookAuthorSerializer(serializers.ModelSerializer):
class Meta: class Meta:
@ -31,8 +31,19 @@ class BookReferenceSerializer(serializers.ModelSerializer):
request = self.context.get('request') request = self.context.get('request')
return BookReference.objects.filter(title=obj.title).count() return BookReference.objects.filter(title=obj.title).count()
class BookAttributeSerializer(serializers.ModelSerializer):
class Meta:
model = BookAttribute
fields = ['id', 'title', 'value', 'book_reference', 'created_at', 'updated_at']
read_only_fields = ['id', 'created_at', 'updated_at']
class BookDetailSerializer(serializers.ModelSerializer): class BookDetailSerializer(serializers.ModelSerializer):
attribute = BookAttributeSerializer(
read_only = True,
source = 'bookattribute_set'
)
author = BookAuthorSerializer( author = BookAuthorSerializer(
read_only = True , read_only = True ,
source = 'bookauthor_set' source = 'bookauthor_set'

3
apps/hadis/urls.py

@ -2,7 +2,7 @@ from django.urls import path
from .views.category import HadisCategorySectListView, HadisCategoryTreeView, CategoriesView, CategoriesBySectView, HadisCategorySelectBySectView, HadisCategorySelectBySectSourceView , HadisCategoryTreeNormalView from .views.category import HadisCategorySectListView, HadisCategoryTreeView, CategoriesView, CategoriesBySectView, HadisCategorySelectBySectView, HadisCategorySelectBySectSourceView , HadisCategoryTreeNormalView
from .views.hadis import HadisCollectionListView, HadisListView, HadisBasicView, HadisDetailView, HadisSyncView, HadisTransmittersView, HadisCorrectionsView from .views.hadis import HadisCollectionListView, HadisListView, HadisBasicView, HadisDetailView, HadisSyncView, HadisTransmittersView, HadisCorrectionsView
from .views.transmitter import TransmitterView ,TransmitterDetailView, TransmitterSyncView,TransmitterOpinionView, TransmitterOriginalTextView from .views.transmitter import TransmitterView ,TransmitterDetailView, TransmitterSyncView,TransmitterOpinionView, TransmitterOriginalTextView
from .views.reference import BookDetailView, BookReferencesView, BookReferenceSyncView
from .views.reference import BookDetailView, BookReferencesView, BookReferenceSyncView, BookAttributeView
from .views.info import HadisInfoView from .views.info import HadisInfoView
@ -30,4 +30,5 @@ urlpatterns = [
path('narrators/<int:transmitters_id>/original_texts',TransmitterOriginalTextView.as_view(), name='narrator-original-texts'), path('narrators/<int:transmitters_id>/original_texts',TransmitterOriginalTextView.as_view(), name='narrator-original-texts'),
path('references/',BookReferencesView.as_view(), name='references'), path('references/',BookReferencesView.as_view(), name='references'),
path('references/<int:bookreference_id>',BookDetailView.as_view(), name='reference-detail'), path('references/<int:bookreference_id>',BookDetailView.as_view(), name='reference-detail'),
path('references/attributes/',BookAttributeView.as_view(), name='book-attributes'),
] ]

22
apps/hadis/views/reference.py

@ -1,7 +1,7 @@
from rest_framework.generics import ListAPIView, RetrieveAPIView
from rest_framework.generics import ListAPIView, RetrieveAPIView,ListCreateAPIView
from rest_framework.response import Response from rest_framework.response import Response
from ..models import BookReference , BookAuthor , BookReferenceImage
from ..serializers.reference import BookAuthorSerializer, BookDetailSerializer , BookReferenceSerializer, BookReferenceSyncSerializer
from ..models import BookReference , BookAuthor , BookReferenceImage, BookAttribute
from ..serializers.reference import BookAuthorSerializer, BookDetailSerializer , BookReferenceSerializer, BookReferenceSyncSerializer, BookAttributeSerializer
from ..docs import book_references_list_swagger, book_authors_list_swagger, book_detail_swagger, reference_sync_swagger from ..docs import book_references_list_swagger, book_authors_list_swagger, book_detail_swagger, reference_sync_swagger
from utils.pagination import NoPagination from utils.pagination import NoPagination
@ -74,6 +74,22 @@ class BookReferenceSyncView(ListAPIView):
class BookAttributeView(ListCreateAPIView):
"""
API view to list all book attributes and create new book attributes
"""
queryset = BookAttribute.objects.all()
serializer_class = BookAttributeSerializer
# def get_queryset(self):
# """
# Optionally filter by book_reference_id if provided as query parameter
# """
# queryset = BookAttribute.objects.all()
# book_reference_id = self.request.query_params.get('book_reference_id', None)
# if book_reference_id:
# queryset = queryset.filter(book_references__id=book_reference_id).distinct()
# return queryset.order_by('title')
# class BookReferencesView(ListAPIView): # class BookReferencesView(ListAPIView):
Loading…
Cancel
Save