проблема с круговыми вложенными ресурсами - PullRequest
0 голосов
/ 13 июня 2019

У меня есть два поля в отдельных файлах для маршала. Это:

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'

Очевидно, что проблема заключается в круговом импорте. Так как мне решить эту проблему?

Кстати : часть 'developer' в game_fields показывает мне "<Developer 1>". И когда я изменяю его на "developer_id": fields.Integer, он дает мне идентификатор разработчика без проблем. Но я хочу, чтобы это было похоже на «разработчика»: «EA Sports». Как я могу это сделать?

1 Ответ

1 голос
/ 14 июня 2019

Такая рекурсивная структура обязательно вызовет проблемы, но если вы решите ее, это один из возможных способов избежать циклических ошибок импорта:

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>.

...