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'))
value = models.CharField(max_length=500, verbose_name=_('value'))
book_references = models.ManyToManyField(
book_reference = models.ForeignKey(
BookReference,
on_delete=models.CASCADE,
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'))
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 ..serializers import HadisListSerializer
from ..models import BookReference , BookAuthor , BookReferenceImage, HadisReference
from ..models import BookReference , BookAuthor , BookReferenceImage, HadisReference , BookAttribute
class BookAuthorSerializer(serializers.ModelSerializer):
class Meta:
@ -31,8 +31,19 @@ class BookReferenceSerializer(serializers.ModelSerializer):
request = self.context.get('request')
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):
attribute = BookAttributeSerializer(
read_only = True,
source = 'bookattribute_set'
)
author = BookAuthorSerializer(
read_only = True ,
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.hadis import HadisCollectionListView, HadisListView, HadisBasicView, HadisDetailView, HadisSyncView, HadisTransmittersView, HadisCorrectionsView
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
@ -30,4 +30,5 @@ urlpatterns = [
path('narrators/<int:transmitters_id>/original_texts',TransmitterOriginalTextView.as_view(), name='narrator-original-texts'),
path('references/',BookReferencesView.as_view(), name='references'),
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 ..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 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):
Loading…
Cancel
Save