【问题标题】:Rest Framework, how to flatten simple many to many relationshipsRest Framework,如何扁平化简单的多对多关系
【发布时间】:2015-12-04 10:27:36
【问题描述】:

我有一个名为booksManytoManyField(),它以嵌套格式序列化,如下所示:

books = BooksSerializer(read_only=True, many=True)

"books": [
{
    "id": 12
},
{
    "id": 13
},

因为我只序列化 1 个字段并且该字段是唯一的。如何展平字段以输出简单列表?

"books": [12, 13]

【问题讨论】:

  • 您可以使用SerializerMethodField 编写您的自定义序列化逻辑。

标签: python django django-rest-framework django-orm


【解决方案1】:

您可以使用SerializerMethodField 并在那里提供自定义序列化逻辑:

class LibrarySerializer(model.ModelSerializer):
    books = serializers.SerializerMethodField()

    def get_books(self, library):
        return [book.id for book in library.books]

【讨论】:

  • 谢谢,我已经做到了这一点,但这似乎引发了大量的查询。我的原始查询集对书籍进行预取,但是在方法中执行此操作时,会为每个对象完成新查询。 edit 啊好的,作为一个列表比较没关系,我正在做另一个过滤器。谢谢
  • @rix 是的,另一个过滤器会使预取的数据无效。不客气:)
【解决方案2】:

您似乎正在寻找只读的PrimaryKeyRelatedField,它包含在 DRF 中,是关系的默认自动生成字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 2019-01-02
    相关资源
    最近更新 更多