在 django rest 框架中制作 api 来显示作者的书籍

making an api to show the books of an auther in django rest framework

我的项目中有两个模型:Author 和 Book。每本书都有一个指向该书作者的外键。 我想写一个 api 来检索作者的实例并显示该特定人的详细信息。 问题是我不知道如何在我的 API.

中包含那个人的书

这是我的 models.py:

class Book(models.Model):
    title = models.CharField(max_length=150)
    rating = models.IntegerField(default=0, validators=[MaxValueValidator(10), MinValueValidator(0),])
    summary = models.TextField()
    author = models.ForeignKey(Author, null=True, on_delete=models.SET_NULL)


class Author(models.Model):
    authorID = models.AutoField(primary_key=True)
    name = models.CharField(max_length=200)
    dateOfBirth = models.DateField(null=True)
    nationality = models.CharField(null=True, max_length=255)

这是对我不起作用的方法:

# Serializers.py
class AuthorRetrieveSerializer(serializers.ModelSerializer):
    class BookSerializer(serializers.ModelSerializer):
        class Meta:
            model = Book
            fields = '__all__'

    bookDetails = BookSerializer(read_only=True, many=True)
    class Meta:
        model = Author
        fields = ('name', 'dateOfBirth', 'nationality', 'bookDetails')

# Views.py
class AuthorRetrieveViewSet(RetrieveUpdateDestroyAPIView):
    permission_classes = (AllowAny,)
    serializer_class = serializers.AuthorRetrieveSerializer
    queryset = Author.objects.all()
    lookup_field = 'authorID'

    def get_queryset(self):
        return self.queryset

此代码成功检索了作者详细信息,但没有给我他们的书。

您是否尝试过在序列化程序上指定源?

# Serializers.py
class BookSerializer(serializers.ModelSerializer):
            class Meta:
                model = Book
                fields = '__all__'    

class AuthorRetrieveSerializer(serializers.ModelSerializer):
        
        bookDetails = BookSerializer(read_only=True, many=True, source="book_set")#correction here
        class Meta:
            model = Author
            fields = ('name', 'dateOfBirth', 'nationality', 'bookDetails')