如何使用 Django Rest Framework JSON API 包含相关资源?

How to include related resource with Django Rest Framework JSON API?

我正在使用 Django Rest Framework JSON API 创建 REST API。我只是想简单地包含一个相关资源(二级关系),但 Django 一直响应错误:

This endpoint does not support the include parameter for path...

结构是这样的:

# models:

class Household(models.Model):
  ...

class HouseholdMember(models.Model):
  household = models.ForeignKey(Household)
  ...

class Subscription(models.Model):
  subscriber = models.ForeignKey(HouseholdMember)
  ...

# serializers

from rest_framework_json_api import serializers

class SubscriptionSerializer(serializers.ModelSerializer):
  class Meta:
    model = Subscription

我希望能够提出这样的请求:http://example.com/api/subscriptions?include=subscriber.household 以便能够按家庭对订阅进行分组。但是,我根本不知道该怎么做。 I know 我需要尝试一下 ResourceRelatedField 但我遗漏了一些东西或太多的新手无法理解它是如何工作的。有帮助吗?

好吧,也许我遗漏了一些明显的东西(因为文档中没有提到),但是如果您查看 Django Rest Framework 源代码示例目录中的 serializers.py 文件 JSON API,看来您需要一个名为 included_serializers 的变量来执行我想要的操作。对于我的示例,这是您需要的:

# models:

class Household(models.Model):
  ...

class HouseholdMember(models.Model):
  household = models.ForeignKey(Household)
  ...

class Subscription(models.Model):
  subscriber = models.ForeignKey(HouseholdMember)
  ...

# serializers

from rest_framework_json_api import serializers

class HouseholdSerializer(serializers.ModelSerializer):
  class Meta:
    model = Household

class HouseholdMemberSerializer(serializers.ModelSerializer):
  included_serializers = {
    'household': HouseholdSerializer
  }

  class Meta:
    model = HouseholdMember

class SubscriptionSerializer(serializers.ModelSerializer):
  included_serializers = {
    'subscriber': SubscriberSerializer
  }

  class Meta:
    model = Subscription