如何使用 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
我正在使用 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