当前位置: 首页 > 面试题库 >

Django Rest Framework递归嵌套父级序列化

鄢修德
2023-03-14
问题内容

我有一个带有自我参照字段的模型,称为parent。模型:

class Zone(BaseModel):
    name = models.CharField(max_length=200)
    parent = models.ForeignKey('self', models.CASCADE, blank=True, null=True, related_name='children')

    def __unicode__(self):
        return self.name

序列化器:

class ZoneSerializer(ModelSerializer):
    parent = PrimaryKeyRelatedField(many=False, queryset=Zone.objects.all())
    parent_disp = StringRelatedField(many=False, source="parent")

    class Meta:
        model = Zone
        fields = ('id', 'name', 'parent', 'parent_disp')

现在,我要序列化区域的父级及其父级及其父级,直到父级为none。我发现了针对孩子而不是父母的递归序列化方法。我怎样才能做到这一点?


问题答案:

尝试在此处使用SerializerMethodField:

def get_parent(self, obj):
    # query what your want here.

我不确定DRF是否有内置方法,但是您可以使用查询来获取所需的方法。



 类似资料:
  • 我的数据结构如下所示: Foo的每个实例都可以包含任意数量的S,这当然反过来又可以包含更多的S等等。那么,我该如何让FreeMarker通过这样的列表呢?

  • 问题内容: 使用MySQL,我想从具有此类字段结构的表中返回父母列表。ID,PARENTID,NAME(标准的父子层次结构)。我想遍历树以返回所有“父母”的列表。 我意识到“嵌套集”可能是处理此问题的更好方法-但目前我无法更改数据的结构。我将来会希望这样做。当前-我的数据集实际上将包含一些深度级别- 没什么疯狂的……也许2-5,所以我的递归命中不应太“昂贵”。 我已经看过SQL Server获取父

  • 我试图创建一个正则表达式模式来匹配每个(内容*),但是该模式可以在另一个((内容)(内容))中找到。我尝试了,但这返回了外部的。 例如:字符串应返回: 第一个匹配: 第二个匹配: 编辑: 我试过:但在?R(未知标志)附近出现错误

  • 问题内容: 我需要将复杂的JSON Blob反序列化为标准.NET容器,以便 在不了解JSON的代码中 使用。它期望的事情是在标准的.NET类型,具体地或其中“对象”可以是原语或递归(词典或列表)。 我不能使用静态类型来映射结果,并且JObject / JToken不适合。理想情况下,将有某种方式(也许通过Contracts?)将原始JSON转换为基本.NET容器。 我一直在寻找任何方法来诱使JS

  • 我想我理解了教科书中对尾部递归函数的定义:在函数调用后不执行任何计算的函数。我还发现,作为一个结果,尾部递归函数的内存效率会更高,因为它每次调用只需要一条记录,而不是每次都需要保留一条记录(就像在普通递归中那样)。 我不太清楚的是,这个定义如何应用于嵌套调用。我将提供一个例子: 我最初给出的答案是,根据定义,它不是尾部递归的(因为外部调用是在计算内部调用之后执行的,所以其他计算是在第一次调用之后完

  • 我正在使用SpringMVC 3.2.4,并希望使用Jackson2将对象序列化为JSON输出。 对象具有递归属性。如果我尝试使用默认的Jackson ObjectMapper序列化它,我会得到一个递归错误。我意识到我可以使用来防止递归,然而,我实际上希望递归能够使在胡子模板中解析更容易。然而,我想限制递归级别。 是否需要指定Jackson序列化程序只递归1级?如果我需要创建自己的序列化程序,我可