当反向关系上 full=True 时,Django Tastypie 会抛出“超出最大递归深度”。

2024-03-27

如果运行以下代码,我会超出最大递归深度:

from tastypie import fields, utils
from tastypie.resources import ModelResource
from core.models import Project, Client


class ClientResource(ModelResource):
    projects = fields.ToManyField(
        'api.resources.ProjectResource', 'project_set', full=True
    )
    class Meta:
        queryset = Client.objects.all()
        resource_name = 'client'


class ProjectResource(ModelResource):
    client = fields.ForeignKey(ClientResource, 'client', full=True)
    class Meta:
        queryset = Project.objects.all()
        resource_name = 'project'

# curl http://localhost:8000/api/client/?format=json
# or
# curl http://localhost:8000/api/project/?format=json

如果在其中一个关系上设置 full=False ,则它有效。我确实理解为什么会发生这种情况,但我需要两个关系来带来数据,而不仅仅是“resource_uri”。有 Tastypie 的方法吗?我设法解决了在项目模型上创建序列化方法的问题,但它远非优雅。谢谢。


你必须重写full_dehydrate一种针对至少一个资源的方法,以跳过导致递归的相关资源的脱水。

或者,您可以定义两种使用相同模型的资源,其中一种是full=True另一个与full=False.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当反向关系上 full=True 时,Django Tastypie 会抛出“超出最大递归深度”。 的相关文章

随机推荐