我正试图在API响应中显示一个“嵌套”模型,并且无法对数据进行格式化。
我有一个调用API的模型,它来自:
就像这样
class Rules(Model):
conditions = models.ManyToManyField(RulesPoliciesConditions)
...
...
class RulesPoliciesConditions(Model):
rules = models.ForeignKey(Rules, ...)
policies = models.ForeignKey(Policy, ...)规则和策略是它们自己的模型,有几个TextFields (名称、昵称、时间戳等)
我的问题是,当我使用规则模型调用一个名为conditions的字段时,只有规则和策略PK显示。我想访问其他属性,如名称、时间戳、昵称等。
我尝试让我的字段(在我的序列化程序中)尝试像"conditions__rules__name“这样的特定调用,但是它是无效的,我也尝试了"conditions.rules.name”,它也是无效的。也许我在序列化程序中使用了错误的字段,我正在尝试conditions = serializers.SlugRelatedField(many=True, queryset=q, slug_field="id")
我的目的是展示这样的东西:
conditions: [
{
rules: {id: rulesId, name: rulesName, ...},
policies: {id: policiesId, name: policiesName, ...}
}, ...
]甚至:条件:{规则: rulesName,策略: policiesName },.
因为现在它只返回rulesId和policiesId,它不“知道”其他字段
编辑:我找到了一个相关的问题,但没有得到相关的答案,Django REST框架:将相关对象中的字段添加到ModelSerializer
发布于 2018-09-21 04:07:57
这可以通过使用嵌套序列化程序来实现。嵌套的级别可以通过各种方法进行控制/定制。
class RulesPoliciesConditionsSerializer(serializers.ModelSerializer):
class Meta:
fields = '__all__'
model = RulesPoliciesConditions
depth = 1
class RulesSerializer(serializers.ModelSerializer):
conditions = RulesPoliciesConditionsSerializer(many=True)
class Meta:
fields = '__all__'
model = Rules将Rules查询集传递给RulesSerializer序列化程序以获得所需的输出
示例
rules_qs = Rules.objects.all()
rules_serializer = RulesSerializer(rules_qs, many=True)
data = rules_serializer.data参考资料
发布于 2018-09-21 03:31:15
为此,可以使用嵌套序列化程序。
class RuleSerializer(serializers.ModelSerializer):
...
class Meta:
model = Rules(rulesId, rulesName)
fields = ('id', 'email', 'country')
class RulesPoliciesConditionsSerializer(serializers.ModelSerializer):
rules = RuleSerializer()
policies = PolicySerializer()
...https://stackoverflow.com/questions/52434564
复制相似问题