如何在Django Rest Framework JSON API中包含相关资源?

dav*_*lab 2 python django django-rest-framework json-api

我正在使用Django Rest Framework JSON API创建REST API。我正在尝试非常简单地包括一个相关资源(二级关系),但是Django不断响应该错误:

This endpoint does not support the include parameter for path...
Run Code Online (Sandbox Code Playgroud)

结构是这样的:

# 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
Run Code Online (Sandbox Code Playgroud)

我希望能够发出这样的请求:http://example.com/api/subscriptions?include=subscriber.household能够按家庭对订阅进行分组。但是,我根本找不到解决方法。我知道我需要一起玩,ResourceRelatedField但是我缺少新手或某些东西,无法理解它的工作原理。有什么帮助吗?

dav*_*lab 5

好吧,也许我缺少一些明显的东西(因为在文档中没有提到),但是如果您查看serializers.pyDjango Rest Framework 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
Run Code Online (Sandbox Code Playgroud)