烧瓶不稳定的圆形嵌套资源的问题

时间:2019-06-13 11:19:58

标签: python flask flask-sqlalchemy 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”。我该怎么办?

1 个答案:

答案 0 :(得分:1)

像这样的递归结构注定会给您带来问题,但是如果您决定采用这种结构,则这是避免循环导入错误的一种可能方法:

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>