BG Development


  Reply to this topicStart new topicStart Poll

> Django reverse foreign key
bleit
Публикувано на: 12-06-2018, 11:24
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 436
Регистриран на: 21.01.06



Здравейте,

Чудя се от известно време и не мога да разбера аз ли искам нещо прекалено "custom" или джангото просто не го поддържа :

Имам 2 модела (Опростявам за целите на примера) :

1. Product :
matchedProductId = models.ForeignKey(OtherProduct, blank=True, null=True, related_name='matched_product_id', on_delete=models.SET_NULL)

2. OtherProduct :
....

Искам в администрацията на OtherProduct да изведа оригиналния продукт (каквото и да е от него, за начало). Или не търся правилно или "automagic-a" джангото не може да го направи, но според мен е първото. Не би трябвало да искам нещо кой знае колко трудно. Пробвах с разни вариации на matched_product_id_set, но получавам само грешки. Пробвах и с queryset да пренапиша самата заявка, но и там не стигнах до никъде, тъй като от OtherProduct няма как директно да стигна обратно до "оригиналния".


--------------------
"Everybody is identical in their secret unspoken belief that way deep down they are different from everyone else."
PMEmail Poster
Top
dedal
Публикувано на: 21-06-2018, 18:42
Quote Post



Име: Григор Колев
Група: Потребител
Ранг: Посетител

Мнения: 79
Регистриран на: 17.11.10



Не съм сигурен как е при Dvango с моделите но логиката трябва да е като на sqlalchemy
Трябва да създадеш backref запис за да достъпиш модела.
Или на sqlalchemy е :
CODE

   grup_id = Column(Integer, ForeignKey(UserGrup.id), nullable=False)
   grup = relationship(UserGrup, backref="grups")


Или моята база е нещо от сорта

CODE

   class UserGrup(Base):
       __tablename__ = 'user_grup'
       id = Column(Integer, primary_key=True)
       name = Column(String(100), nullable=False, unique=True)
       grup_right = relationship("GrupRight")

   class Right(Base):
       __tablename__ = 'rights'
       id = Column(Integer, primary_key=True)
       mod_name = Column(String(100), nullable=False, unique=False)
       option = Column(String(100), nullable=False, unique=True)
   
   class GrupRight(Base):
       __tablename__ = 'grup_right'
       id = Column(Integer, primary_key=True)
       grup_id = Column(Integer, ForeignKey(UserGrup.id), nullable=False)
       right_id = Column(Integer, ForeignKey(Right.id), nullable=True)
       grup = relationship("UserGrup", backref='user_grup.name')
       right = relationship(Right, backref='rights.mod_name')

   class User(Base):
       __tablename__ = 'users'
       id = Column(Integer, primary_key=True)
       name = Column(String(100), nullable=False, unique=True, index=True)
       passwd = Column(String(100), nullable=False, unique=False)
       cart = Column(String(100), nullable=True, unique=True, index=True)
       cart_block_9 = Column(String(100), nullable=True, unique=False, index=True)
       grup_id = Column(Integer, ForeignKey(UserGrup.id), nullable=False)
       grup = relationship(UserGrup, backref="grups")
       enable = Column(Boolean, nullable=False, unique=False, default=True)
       flor_id = Column(Integer, ForeignKey('casino_flor.id'),  nullable=True, unique=False)
       flor = relationship( 'Flor', backref="my_flor")
       kasa_id = Column(Integer, ForeignKey('kasa.id'),  nullable=False, unique=True)
       kasa = relationship( 'Kasa', backref="user_kasa")


По тази начин като взема логнатия user мога да достъпя крупата и правата за достъп

CODE

   user.grup.right.name
   # Или като взема групата на потребителя да парсна всички права
   for item in user.grup..grup_right:
       print item.right.option

PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0