【问题标题】:How to include related resource with Django Rest Framework JSON API?如何使用 Django Rest Framework JSON API 包含相关资源?
【发布时间】:2016-12-18 11:02:22
【问题描述】:

我正在使用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 一起玩,但我缺少一些东西或太多的新手来理解它是如何工作的。有什么帮助吗?

【问题讨论】:

  • json api 不受欢迎。没有看到足够多的关于通过 API 中的查询参数进行声明性实体遍历的提及。

标签: python django django-rest-framework json-api


【解决方案1】:

好吧,也许我遗漏了一些明显的东西(因为文档中没有提到),但是如果你查看 Django Rest Framework JSON API 源示例目录中的 serializers.pyfile,它看起来像你需要有一个名为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

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 2013-01-12
    • 2021-12-31
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2017-10-19
    相关资源
    最近更新 更多