【问题标题】:How to show depth of a single field in Django Rest Framework?如何在 Django Rest Framework 中显示单个字段的深度?
【发布时间】:2017-03-25 07:41:40
【问题描述】:

我在我的序列化程序上使用depth = 1 来显示外键字段的详细信息。但是,它还显示了我并不真正需要的另一个外键字段的详细信息。如何显示一个字段的详细信息而不显示另一个字段的详细信息?

【问题讨论】:

  • 我认为你不能用 depth 做到这一点,根据我的经验,我总是用另一个序列化程序自定义外键字段,而不是使用 depth 然后你可以控制将显示哪个字段有详细信息,哪个字段不会。
  • 感谢@Enix。请给我一个参考,我可以按照你刚才解释的方式做吗?

标签: django rest frameworks


【解决方案1】:

仅供参考

假设你有三个模型:

class User(model.Model):
    username = model.CharField('username', max_length=10)

class Question(model.Model):
    title = models.CharField('title', max_length=10)

class Answer(model.Model):
    user = model.ForeignKey(User)
    question = model.ForeignKey(Question)
    body = model.TextField('the answer body')

你需要序列化Answer,显示Question的细节,但不显示User的细节,然后你可以这样定义你的序列化器:

class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Question
        exclude = []

class AnswerSerializer(serializers.ModelSerializer):
    question = QuestionSerializer(many=False, read_only=True)
    class Meta:
        model = Answer
        exclude = []

当你序列化AnswerAnswerSerializer 时,你会注意到question 字段同时被序列化,但是user 字段仍然是一个没有序列化的整数。

如果需要序列化外键,可以在序列化器中显式定义一个字段,该字段名与model中的字段名相同,值等于外键模型序列化器。当模型被序列化时,在这种情况下Answer,外键字段,在这种情况下question,将用QuestionSerializer“扩展”,其他外键字段仍然保留原始外键值,@987654334 @ 在这种情况下,如果您没有在序列化程序中显式定义序列化程序字段。

希望对您有所帮助。

【讨论】:

  • 也可以在没有exclude=[] 位和fields = '__all__' 的情况下工作,只需“覆盖”我们要为其分配自定义序列化程序的字段。
猜你喜欢
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 2021-09-03
  • 2018-03-29
  • 2013-01-15
  • 1970-01-01
相关资源
最近更新 更多