Python 序列化通过另一个模型相关的模型字段

Python 序列化通过另一个模型相关的模型字段,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有四个这样链接的模型: class A: some fields class B: ForeignKey('A') class C: ForeignKey('B') class D: ForeignKey('C') 现在,当我序列化时,我还想序列化A中的相关模型字段。当然,这可以使用嵌套序列化器完成,如下所示: class ASerializer: class Meta: model = A fields = ('id', some fields)

我有四个这样链接的模型:

class A:
  some fields

class B:
  ForeignKey('A')

class C:
  ForeignKey('B')

class D:
  ForeignKey('C')
现在,当我序列化时,我还想序列化A中的相关模型字段。当然,这可以使用嵌套序列化器完成,如下所示:

class ASerializer:

  class Meta:
    model = A
    fields = ('id', some fields)

class BSerializer:
  a_s = ASerializer(read_only=True)

  class Meta:
    model = B
    fields('id', 'a_s')

class CSerializer:
  b_s = BSerializer(read_only=True)

  class Meta:
    model = C
    fields('id', 'b_s')

class DSerializer:
  c_s = CSerializer(read_only=True)

  class Meta:
    model = D
    fields('id', 'c_s')

但是,我只想在序列化D时显示相关A对象的字段,而不包括C或B对象。如何执行此操作?

您可以在
类CSerializer
中定义
序列化程序。SerializerMethodField()

class DSerializer:
  c_s = serializers.SerializerMethodField()

  @staticmethod
  def get_c_s(item):
     return item.c.b.a

  class Meta:
    model = D
    fields('id', 'c_s')

文档:

为什么要把它变成静态方法?这只是我的习惯。如果需要,可以将其删除。如果删除它,您需要更改为
def get_b__s(self,item):
。很抱歉,我不得不重新编辑该问题。深度又增加了1。在这种情况下我该怎么做?它不起作用。AttributeError:“RelatedManager”对象没有属性“a”。您可以在
项c.b
中发布所有字段数据吗?如果在pycharm中,则使用evaluate