# 1. Books Finder def find_books_by_genre_and_language(book_genre, book_language): found_books = Book.objects.filter(genre=book_genre, language=book_language) return found_books # print(find_books_by_genre_and_language("Romance", "English")) # print(find_books_by_genre_and_language("Poetry", "Spanish")) # print(find_books_by_genre_and_language("Mystery", "English")) # 2. Find Authors' Nationalities def find_authors_nationalities(): authors = Author.objects.exclude("nationality"=None) result = [ f"{author.first_name} {author.last_name} is {author.nationality}" for author in authors ] return "\n".join(result) # print(find_authors_nationalities()) # 3. Order Books by Year def order_books_by_year(): ordered_books = Book.objects.order_by("publication_year", "title") result = [ f"{book.publication_year} year: {book.title} by {book.author}" for book in ordered_books ] return "\n".join(result) # print(order_books_by_year()) # 4. Delete Review by ID def delete_review_by_id(review_id): review = Review.objects.get(id=review_id) review.delete() return f"Review by {review.reviewer_name} was deleted" # print(delete_review_by_id(4)) # print(delete_review_by_id(1)) # print(delete_review_by_id(8)) # 5. Filter Authors by Nationalities def filter_authors_by_nationalities(nationality): authors = Author.objects.filter(nationality=nationality).order_by("first_name", "last_name") result = [ author.biography if author.biography is not None else f"{author.first_name} {author.last_name}" for author in authors ] return "\n".join(authors) # print("American authors:") # print(filter_authors_by_nationalities('American')) # print() # print("British authors:") # print(filter_authors_by_nationalities('British')) # print() # print("Authors with no nationalities:") # print(filter_authors_by_nationalities(None)) # 6. Filter Authors by Birth Year def filter_authors_by_birth_year(first_year, second_year): authors = Author.objects.filter(birth_date__year__range=(first_year, last_name)).order_by("-birth_date")) result = [ f"{author.birth_date}: {author.first_name} {author.last_name}" for author in authors ] return "\n".join(result) # print("Authors born between 1980 and 2000:") # print(filter_authors_by_birth_year(1980, 2000)) # print() # print("Authors born between 1950 and 1960:") # print(filter_authors_by_birth_year(1950, 1960)) # print() # print("Authors born between 2000 and 2010:") # print(filter_authors_by_birth_year(2000, 2010)) # 7. Change Reviewer's Name def change_reviewer_name(reviewer_name, new_name): (Review.objects .filter(reviewer_name=reviewer_name) .update(reviewer_name=new_name)) result = Review.objects.all() return result # print("Change Alice Johnson to A.J.:") # print(change_reviewer_name("Alice Johnson", "A.J.")) # print() # print("Change Bob Wilson to Bobby W.:") # print(change_reviewer_name("Bob Wilson", "Bobby W.")) # print() # print("Change A.J. to A. Johnson:") # print(change_reviewer_name("A.J.", "A. Johnson"))