from django.forms.models import model_to_dict def book_to_dict(book): authors_data = [] for author in book.authors.all(): author_data = model_to_dict(author) author_data['au_detail'] = model_to_dict(author.au_detail) gender_choices = { 0: '女', 1: '男', 2: '保密' } author_data['au_detail']['gender'] = gender_choices[author_data['au_detail']['gender']] authors_data.append(author_data) return { 'id': book.id, 'title': book.title, 'price': book.price, 'pub_date': book.pub_date, 'publish': model_to_dict(book.publish), 'authors': authors_data } def getList(request): books = Book.objects.filter(title='西游记').select_related('publish').prefetch_related('authors', 'authors__au_detail') books_data = [book_to_dict(book) for book in books] return JsonResponse({ 'data': books_data, 'length': len(books_data), 'success': True, }, safe=False) def findBy(request): book_id = request.GET.get('id') book = Book.objects.filter(id=book_id).select_related('publish').prefetch_related('authors', 'authors__au_detail').first() if not book: return JsonResponse({ 'error': 'Book not found', 'success': False }, status=404) book_data = book_to_dict(book) return JsonResponse({ 'data': book_data, 'success': True, }, safe=False)