Assargadon / magritte-python

0 stars 0 forks source link

Поддержка множественных MAToOneRelationDescription к одной таблице в MagritteSQLAlchemy #121

Open rybalchenkoserg opened 7 months ago

rybalchenkoserg commented 7 months ago

Если в контейнере используются несколько MAToOneRelationDescription для связи с одним и тем же объектом, то в таблице БД создается только первая связь. Пример:

class Host(MAModel):
    address = ""
    protocol = ""  

host_desc = MAContainer()   
host_desc.name = 'Host'
host_desc.setChildren(
    [
        MAStringDescription(
            name='address', label='Ip Address', required=True, accessor=MAAttrAccessor('address'),
            sa_isPrimaryKey=True, 
        ),
        MAStringDescription(
            name='protocol', label='Protocol', required=True, accessor=MAAttrAccessor('protocol'),
        ),
    ]
)

class Interface(MAModel):
    interface=""
    ip4=""
    gateway=""

interface_desc = MAContainer()   
interface_desc.name = 'Interface'
interface_desc.setChildren(
    [
        MAStringDescription(
            name='interface', label='Interface', required=True, accessor=MAAttrAccessor('interface')
            , sa_isPrimaryKey=True
        ),
        MAToOneRelationDescription(
            name='ip4_addr', label='IP4 Address', required=True,
            accessor=MAAttrAccessor('ip4_addr'), classes=[Host],
            reference=host_desc
        ),
        MAToOneRelationDescription(
            name='gateway', label='Gateway', accessor=MAAttrAccessor('gateway'), classes=[Host],
            reference=host_desc
        )
    ]
)

В этом случае, в таблице Interface будет содано только поле только для ip4_addr, для gateway поле не создается.