Соотношение «многие ко многим» в разных модулях - PullRequest
0 голосов
/ 11 апреля 2020

Вот ситуация, с которой я сталкиваюсь, я использую Peewee для доступа к метаданным (только для чтения) с веб-сайта django для обработки данных.

models/base.py:

db = DatabaseProxy()


class BaseModel(Model):
    """Base model used to tie all the models to a database instance, any model
    created must inherit from this class.
    """
    class Meta:
        database = db

models/nodes.py:

from .base import BaseModel


class Node(BaseModel):
    """Node model"""
    uuid = CharField(index=True)
    name = CharField()

    class Meta:
        table_name = 'nodes_node'

models/tags.py:

from .base import BaseModel
from .nodes import Node


class Tag(BaseModel):
    name = CharField()
    uuid = CharField(index=True)

    class Meta:
        table_name = 'tags_tag'


class TagNode(BaseModel):
    """A private class used on the pivot table to implement the Many-To-Many
    relation between :py:class:`Tag` and :py:class:`Node`.
    """
    node = ForeignKeyField(Node,
            backref='tags',
            column_name='node_id',
            field='id'
    )
    tag = ForeignKeyField(Tag,
            backref='nodes',
            column_name='tag_id',
            field='id'
    )

    class Meta:
        table_name = 'tags_tag_nodes'
        indexes = (
            (('tag', 'node'), True),
        )

У меня есть несколько методов на модели Tag, которые создают и возвращают запросы с использованием соединения TagNode Таблица. Теперь я хотел бы построить аналогичные методы на модели Node, но попал в круговые проблемы импорта и не вижу, как это исправить. Я попытался использовать DeferredForeignKey для соединительной таблицы, как предложено в документации , но без игры в кости.

Я бы хотел сохранить модульность, так как у меня есть много других модели и размещение всего в одном файле кажется нецелесообразным.

То, что я до сих пор пробовал: перемещение модели соединения в выделенный модуль с помощью DefferedForeignkey, воспроизведение с порядком импорта.

...