Уведомления

Группа в Telegram: @pythonsu

#1 Март 13, 2017 20:50:50

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

Добрый день.
Подскажите каким образом организовать связь один ко многим в пределах одной таблице?
есть код:

 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 и нужен ли он?
спасибо

Отредактировано ivn (Март 13, 2017 22:06:19)

Офлайн

#2 Март 13, 2017 22:15:21

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

Нифига не понял. Т.е. Вам нужно self-MTM?
Приведу пример. Есть таблица товаров. В таблице есть поле, которое отвечает за “с этим товаром покупают”, которое ссылается на товары в этой же таблице. Это называется SELF-MTM…

Отредактировано 4kpt_V (Март 13, 2017 22:18:12)

Офлайн

#3 Март 14, 2017 09:47:32

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

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

Прикреплённый файлы:
attachment Снимок.JPG (20,3 KБ)

Офлайн

#4 Март 14, 2017 09:58:51

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

Это не МТМ, а MTO. Если Вы правильно нарисовали кратность возле стрелочки. Да. Там нужен relationship. Это связь SELF-MTO.

Офлайн

#5 Март 14, 2017 11:14:23

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

4kpt_V
Это не МТМ, а MTO. Если Вы правильно нарисовали кратность возле стрелочки. Да. Там нужен relationship. Это связь SELF-MTO.
а как должен выглядеть код? что бы он учитывал наличия id иначе добавление не возможно

Офлайн

#6 Март 14, 2017 11:33:13

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

Эммм. Не понял вопроса. Вы делаете связь между объектами. И при создании связи указываете объекты. Во

Вот Вам пример из моего доклада на конференции:

 #
class Parent(Base):
	other_id = Column(Integer, 
		ForeignKey("parent.id")
	)
    	
	other = relationship("Parent",
		remote_side=[id],
		backref=backref("main",
			order_by=family_name)
		)
	)

Здесь показана связь между родителем и другим родителем. Т.е. для каждого родителя может быть другой родитель, т.е. для отца - мать, а для матери - отец.

Отредактировано 4kpt_V (Март 15, 2017 19:29:20)

Офлайн

#7 Март 14, 2017 14:25:05

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

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

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

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

Отредактировано ivn (Март 14, 2017 14:27:40)

Офлайн

#8 Март 14, 2017 14:51:35

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

доклад

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

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

Офлайн

#9 Март 14, 2017 20:29:04

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице

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

Отредактировано ivn (Март 14, 2017 20:37:51)

Офлайн

#10 Март 14, 2017 21:11:06

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy связь один ко многим в пределах одной таблице


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 на стороне МНОГИМ?
верно?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version