使用自然外键序列化Django中的相关数据(三种模型,两层)

Serializing Related Data in Django using Natural Foregin Keys (Three Models, Two Layers)

我有三个模型,ProductProductReleaseReleaseNote,它们都继承自具有以下关系的抽象模型工厂(具有公共字段):

class Product(abstract_base_model_factory()):
    <additional fields>

class ProductRelease(abstract_base_model_factory()):
    <additional fields>
    product = models.ForeignKey(Product, on_delete=models.CASCADE,
                                related_name='product_releases')

class ReleaseNote(abstract_base_model_factory()):
    <additional fields>
    product_release = models.ForeignKey(ProductRelease, on_delete=models.CASCADE,
                                        related_name='release_notes')

我已按照文档序列化这些以返回 JSON。我使用 docs here 来设置自然键的序列化。

如果需要,我可以添加额外的代码,但它主要是样板文件并且适用于两个模型(ProductReleaseProductReleaseNoteProductRelease ).但它不适用于三个模型。

例如,如果我序列化 ProductRelease 个对象,我可以看到 Product 和我指定的字段:

{
  "product_releases": [
    {
      "model": "products.productrelease", 
      "pk": 7, 
      "fields": {
          "name": "Product Release A",
          "product": "prod1"
      }
    },
    { . . . },
  ]
}

但是,我希望能够序列化 ReleaseNote 个对象,然后显示 ProductRelease(第一个外键关系) Product(第二个外键关系)对象。

是否可以在不使用像 Django REST Framework 这样的包的情况下在单个 JSON 响应中完成?我想在不需要额外软件包的情况下实现这一目标。

更新

一段时间后,我意识到 @oleksii 是对的。我最终实现了 Django REST Framework 并获得了我需要的嵌套。效果很好。

您可以像这样使用嵌套模型序列化程序:

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = "__all__"

class ProductReleaseSerializer(serializers.ModelSerializer):
    product = ProductSerializer(many=True)

    class Meta:
        model = ProductRelease
        fields = "__all__"


class ReleaseNoteSerializer(serializers.ModelSerializer):
    product_release = ProductReleaseSerializer()

    class Meta:
        model = ReleaseNote
        fields = "__all__"

release_note_model_instance = ReleaseNote.objects.all()
print(ReleaseNoteSerializer(release_note_model_instance, many=True).data)