python - flask-restful 循环嵌套资源的问题
问题描述
我在单独的文件中有两个字段要编组。他们是:
from games.controllers.api.categories import category_fields
game_fields = {
'title': fields.String,
'developer': fields.String,
'categories': fields.List(fields.Nested(category_fields)),
'uri': fields.Url('game')
}
和
from games.controllers.api.games import game_fields
category_fields = {
'name': fields.String,
'games': fields.List(fields.Nested(game_fields)),
'uri': fields.Url('category')
}
当我运行该应用程序时,它会抛出一个错误:
ImportError: cannot import name 'category_fields' from 'games.controllers.api.categories'
显然问题在于循环导入。那么我应该如何解决这个问题呢?
顺便说一句:game_fields 中的“开发者”部分向我显示“ <Developer 1>
”。当我将其更改为“developer_id”:fields.Integer 时,它可以毫无问题地为我提供开发人员 ID。但我希望它像“开发者”:“EA Sports”。我怎样才能做到这一点?
解决方案
像这样的递归结构肯定会给您带来问题,但是如果您决定这样做,这是避免循环导入错误的一种可能方法:
game_fields = {
'title': fields.String,
'developer': fields.String,
'uri': fields.Url('game')
}
from games.controllers.api.categories import category_fields
game_fields['categories'] = fields.List(fields.Nested(category_fields))
category_fields = {
'name': fields.String,
'uri': fields.Url('category')
}
from games.controllers.api.games import game_fields
category_fields['games'] = fields.List(fields.Nested(game_fields))
至于你的第二个问题,你还没有描述你的Developer
班级是什么样的。如果您可以控制此类,则可以更改此类将自身呈现为字符串的方式,并使其成为开发人员的名称,而不是<Developer id>
.