Настроить имя настраиваемого поля SQLAlchemy для внешнего ключа? - PullRequest
0 голосов
/ 23 мая 2019

Отношения = Многие Hero имеют один Planet.

Я бы хотел позвонить hero.home_planet, потому что персонажи Звездных войн часто перемещаются в космосе. Но под моей моделью поле называется planet_id.

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

Как у planet_id = db.Column( name ='home_planet')?

Могу ли я просто изменить имя таблицы на __tablename__ = 'home_planet'?

class Hero(db.Model):
    __tablename__ = 'heroes'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String())
    race = db.Column(db.String())
    planet_id = db.Column(db.Integer, db.ForeignKey('planets.id'), nullable=True)

    def __repr__(self):
        return '<Hero %r>' % self.name

Ответы [ 2 ]

1 голос
/ 23 мая 2019

С flask_sqlalchemy:

class Planet(db.Model)
    __tablename__ = 'planet'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    heros = db.relationship('Hero', backref='home_planet')

class Hero(db.Model):
    __tablename__ = 'heroes'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String())
    race = db.Column(db.String())
    planet_id = db.Column(db.Integer, db.ForeignKey('planets.id'), nullable=True)

    def __repr__(self):
        return '<Hero %r>' % self.name

Теперь вы можете звонить your_hero.home_planet

0 голосов
/ 23 мая 2019

Стоит ознакомиться с документами SQLAlchemy , чтобы узнать об огромном количестве опций, которые вы можете использовать здесь, но, похоже, простое relationship() будет работать:

planet = relationship('Planet', backref='heroes')

Теперь вы можете звонить my_hero.planet или наоборот my_planet.heroes

...