首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Django Rest框架中显示我的M2M模型

如何在Django Rest框架中显示我的M2M模型
EN

Stack Overflow用户
提问于 2018-09-20 23:19:00
回答 2查看 135关注 0票数 0

我正试图在API响应中显示一个“嵌套”模型,并且无法对数据进行格式化。

我有一个调用API的模型,它来自:

就像这样

代码语言:javascript
复制
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")

我的目的是展示这样的东西:

代码语言:javascript
复制
conditions: [
    {
     rules: {id: rulesId, name: rulesName, ...},
     policies: {id: policiesId, name: policiesName, ...}
    }, ...
]

甚至:条件:{规则: rulesName,策略: policiesName },.

因为现在它只返回rulesId和policiesId,它不“知道”其他字段

编辑:我找到了一个相关的问题,但没有得到相关的答案,Django REST框架:将相关对象中的字段添加到ModelSerializer

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-21 04:07:57

这可以通过使用嵌套序列化程序来实现。嵌套的级别可以通过各种方法进行控制/定制。

代码语言:javascript
复制
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序列化程序以获得所需的输出

示例

代码语言:javascript
复制
rules_qs = Rules.objects.all()
rules_serializer = RulesSerializer(rules_qs, many=True)
data = rules_serializer.data

参考资料

  1. 深度
  2. 嵌套串行化器
票数 1
EN

Stack Overflow用户

发布于 2018-09-21 03:31:15

为此,可以使用嵌套序列化程序。

代码语言:javascript
复制
class RuleSerializer(serializers.ModelSerializer):
    ...
    class Meta:
         model = Rules(rulesId, rulesName)
         fields = ('id', 'email', 'country')

class RulesPoliciesConditionsSerializer(serializers.ModelSerializer):
     rules = RuleSerializer()
     policies = PolicySerializer()
     ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52434564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档