我在单独的文件中有两个字段以进行封送。他们是:
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”。我该怎么办?
答案 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>
。