2016-05-26 2 views
0

Ich bin auf der Suche nach einer bequemen Möglichkeit zum Erstellen von ModelView, um eine Anzahl von untergeordneten Elementen an einen übergeordneten anfügen, wenn Sie es erstellen. Zum Beispiel, ich habe Modelle:Zuordnung von Objektobjekten, Anhängen von Kindern an Eltern, Verbergen der Verwendung einer "mittleren" Tabelle

class Order(db.Model): 
    __tablename__ = 'order' 
    id = db.Column(db.Integer, primary_key=True) 
    things = db.relationship('OrderList', back_populates='order', lazy='dynamic') 

class OrderList(db.Model): 
    __tablename__ = 'order_list' 
    order_id = db.Column(db.Integer, db.ForeignKey('order.id'), primary_key=True) 
    thing_id = db.Column(db.Integer, db.ForeignKey('things.id'), primary_key=True) 
    amount = db.Column(db.Numeric(precision=10, scale=3)) 
    order = db.relationship('Order', back_populates='things', lazy='joined') 
    thing = db.relationship('Thing', back_populates='orders', lazy='joined') 

class Thing(db.Model): 
    __tablename__ = 'things' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(128)) 
    orders = db.relationship('OrderList', back_populates='thing', lazy='dynamic') 
    stock = db.Column(db.Numeric(precision=10, scale=3)) 
    price = db.Column(db.Numeric(precision=10, scale=3)) 

einfach fügte hinzu, dass Modelle zu-admin-Kolben, würde ich die Gelegenheit bekommen zu ORDER Instanzen Sache oder zu bestellen anhängen:

enter image description here enter image description here Aber Wie füge ich Kinder an Eltern an, ohne auf das mittlere OrderList-Objekt zuzugreifen? Genau wie die Verwendung der Eins-zu-viele-Beziehung.

Tabelle Schema:

enter image description here

+0

Warum möchten Sie 'Thing' an' Order' anhängen, Sie haben dort keine Beziehung definiert. Ich könnte mich irren, können Sie die Frage etwas ausführlicher erklären. – formatkaka

+0

@Siddhant Warum hast du angenommen, dass ich keine Beziehung definiert habe? Tatsächlich habe ich db.relationship verwendet, um Order to OrderList und OrderList mit Thing zu verknüpfen, um die M-to-M-Beziehung zu deklarieren. Ich werde meine Frage mit Tabellenschema erweitern. – aryndin

Antwort

0

Von dem, was ich verstehe, wollen Sie sich auf Order und Thing eine viele zu viele Beziehung zu definieren.

eher OrderList Klasse als zu erklären, ich glaube, Sie sollten die viele zu viele Beziehung wie diese

  1. Many to Many

  2. Adding Removing in MtM

Auf diese Weise erklären Sie Instanzen erstellen können beide Order und Thing und fügen Sie sie zu einem Ma zusammen Ny zu Viele Beziehung.

EDIT

können Sie Association Proxy verwenden, um die Arbeit zu erledigen.

Sie müssen den folgenden Konstruktor auf Ihre OrderList class

def __init__(self,amount, order, thing): 
    self.amount = amount 
    self.order = order 
    self.thing = thing 

Andere als diese hinzugefügt werden Sie association proxy definieren, wie in dem Link angezeigt. Dies sollte Ihre Arbeit erledigen.

+0

Wie Sie oben sehen können, habe ich bereits MtM Beziehung mit 'Assotiation Object' Muster definiert - http://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#association-object kann ich nicht verwenden basic 'association_table' Muster, da ich zusätzliche Daten speichern muss, wie 'price' und' amount'. Jetzt muss ich Flask-Admin machen, um zu ermöglichen, dass Kinder (Dinge) an die Reihenfolge (Reihenfolge) angehängt werden, während eine neue erstellt wird, ohne sich mit dem Proxy-Objekt zu beschäftigen. – aryndin

+0

ok, vorausgesetzt, ich habe mit OrderList-Klasse, AssotioationProxy und anderen gemacht, wie setze ich jetzt Betrag und Preis für jedes Ding beim Erstellen neuer Bestellung? Ich muss die Bearbeitungsansicht für Standardaufträge um mindestens zusätzliche Felder erweitern. – aryndin

+0

Bitte überprüfen Sie den Dokumentationslink, den ich in meiner Antwort angegeben habe. Es wurde dort erklärt. – formatkaka

Verwandte Themen