Найти - Пользователи
Полная версия: Flask-SQLAlchemy связь один ко многим в пределах одной таблице
Начало » Базы данных » Flask-SQLAlchemy связь один ко многим в пределах одной таблице
1 2 3
ivn
Добрый день.
Подскажите каким образом организовать связь один ко многим в пределах одной таблице?
есть код:

 class MenuHorizontal(db.Model):
    __tablename__ = 'menu_horizontal'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(45), nullable=False)
    id_contents = db.Column(db.Integer, db.ForeignKey('contents.id'), nullable=False)
    id_parent = db.Column(db.Integer, db.ForeignKey('menu_horizontal.id'), nullable=False)
    # menu_horizontal = db.relationship('MenuHorizontal', backref='menu_horizontal_this', lazy='dynamic')

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

id|name|id_contents|id_parent
1|menu|1 |1
2|menU|1 |1
3|menY|1 |2

а вот такая нет:

id|name|id_contents|id_parent
1|menu|1 |1
2|menU|1 |1
3|menY|1 |5

так же возможен ли здесь relationship и нужен ли он?
спасибо
4kpt_V
Нифига не понял. Т.е. Вам нужно self-MTM?
Приведу пример. Есть таблица товаров. В таблице есть поле, которое отвечает за “с этим товаром покупают”, которое ссылается на товары в этой же таблице. Это называется SELF-MTM…
ivn
4kpt_V
Нифига не понял. Т.е. Вам нужно self-MTM?Приведу пример. Есть таблица товаров. В таблице есть поле, которое отвечает за “с этим товаром покупают”, которое ссылается на товары в этой же таблице. Это называется SELF-MTM…
Плохо понял Ваш пример, приведу вот такой скрин, мб он прояснит ситуацию:
4kpt_V
Это не МТМ, а MTO. Если Вы правильно нарисовали кратность возле стрелочки. Да. Там нужен relationship. Это связь SELF-MTO.
ivn
4kpt_V
Это не МТМ, а MTO. Если Вы правильно нарисовали кратность возле стрелочки. Да. Там нужен relationship. Это связь SELF-MTO.
а как должен выглядеть код? что бы он учитывал наличия id иначе добавление не возможно
4kpt_V
Эммм. Не понял вопроса. Вы делаете связь между объектами. И при создании связи указываете объекты. Во

Вот Вам пример из моего доклада на конференции:
 #
class Parent(Base):
	other_id = Column(Integer, 
		ForeignKey("parent.id")
	)
    	
	other = relationship("Parent",
		remote_side=[id],
		backref=backref("main",
			order_by=family_name)
		)
	)

Здесь показана связь между родителем и другим родителем. Т.е. для каждого родителя может быть другой родитель, т.е. для отца - мать, а для матери - отец.
ivn
4kpt_V
Эммм. Не понял вопроса. Вы делаете связь между объектами. И при создании связи указываете объекты. ВоВот Вам пример из моего доклада на конференции:
а что за доклад?

пока не понимаю Ваш код, там чего то не хватает?

если возможно показать пример на моём коде с учетом схемы.
т.е. я пробую сделать так, что id_parent могу выбираться из id
спасибо большое.
4kpt_V
доклад

ivn
если возможно показать пример на моём коде с учетом схемы.
т.е. я пробую сделать так, что id_parent могу выбираться из id
спасибо большое.

Неа. Моя задача не решить вашу, а объяснить Вам как это сделать
ivn
4kpt_V
доклад
начал смотреть доклад, сразу появился вопрос, а есть слайды? так как плохо видно
готов рассмотреть еще варианты объяснения -))
ivn

4kpt_V
Неа. Моя задача не решить вашу, а объяснить Вам как это сделать

ну по идеи вот этот код и должен работать

  class MenuHorizontal(db.Model):
    __tablename__ = 'menu_horizontal'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(45), nullable=False)
    id_contents = db.Column(db.Integer, db.ForeignKey('contents.id'), nullable=False)
    id_parent = db.Column(db.Integer, db.ForeignKey('menu_horizontal.id'), nullable=False)
    menu_horizontal = db.relationship('MenuHorizontal', backref='menu_horizontal_this', lazy='dynamic')

db.relationship указывается на стороне ОДИН?
db.ForeignKey на стороне МНОГИМ?
верно?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB