Django/DRF:如何从serializers.SlugRelatedField 获取多个slug_field?

Dan*_*nny 0 django django-rest-framework

我有一个序列化器来填充 AJAX 表,如下所示:

class BookSerializer(seralizers.ModelSerializer):
    author = serializers.SlugRelatedField(
        many=True,
        read_only=True,
        slug_field="name"
    )

    class Meta:
        model = Book
        fields = (
            "name",
            "author",
            "slug"
        )
Run Code Online (Sandbox Code Playgroud)

author可以包含任意数量的作者,这就是为什么我需要以这种方式处理它。目前我可以打印出书名并将其与其链接。我还得到了作者姓名列表,而不是 ID。

我的问题是如何获取每个作者页面的 slugs?我想将每个作者链接到自己的页面,但是使用类似的东西author.slug不起作用,添加以下内容也不起作用:

    author_slugs = serializers.HyperlinkedRelatedField(
        many=True,
        read_only=True,
        view_name="slug"
    )
Run Code Online (Sandbox Code Playgroud)

然后我将author_slugs添加到字段中——这引发了一个错误,即author_slugs不是Book模型中的有效字段。有没有办法为每个作者访问多个字段?

Ali*_*ari 5

看来您正在寻找嵌套序列化器。尝试

class AuthorSerializer(serializers.ModelSerialzer):
    class Meta:
        model = Author
        fields = (
            'name',
            'page',
        )

class BookSerializer(seralizers.ModelSerializer):
    author = AuthorSerializer(
        many=True,
        read_only=True,
    )

    class Meta:
        model = Book
        fields = (
            "name",
            "author",
            "slug"
        )
Run Code Online (Sandbox Code Playgroud)