Ich habe eine vier Klassen wie folgt: Group
, Parent
, Child
, Toy
.SQLAlchemy Chaining Association Proxy für Urenkel?
Group
hat eineparents
Beziehung zeigt aufParent
Parent
hat einechildren
Beziehung zu zeigenChild
Child
hat einetoys
BeziehungToy
Parent
zu zeigen hat ein toys
association_proxy
, dass alle produziert die Toy
s dass die Parent
's Kinder haben.
Ich möchte in der Lage sein, alle Toys in einer Gruppe zu bekommen. Ich habe versucht, eine association_proxy
auf Group
, die Parent
's toys
, aber es ergibt dies:
[[<Toy 1>, <Toy 2>], [], [], []]
, wenn ich will dies:
[<Toy 1>, <Toy 2>]
Wenn die Parent
' Links erstellen s children
nicht haben Alle Toy
s, dann die toys
Association Proxy ist []
. Der zweite Zuordnungs-Proxy kann jedoch die leeren Listen nicht ausschließen. Außerdem sollten die Listen minimiert sein. Gibt es das überhaupt, um das zu schaffen?
class Group(db.Model):
id = db.Column(db.Integer, primary_key=True)
created_at = db.Column(db.DateTime, default=utils.get_now_datetime)
name = db.Column(db.String(80, convert_unicode=True))
# relationships
parents = db.relationship('Parent', backref='group')
toys = association_proxy('parents', 'toys')
class Parent(db.Model):
id = db.Column(db.Integer, primary_key=True)
group_id = db.Column(db.Integer, db.ForeignKey('group.id', ondelete='CASCADE'))
created_at = db.Column(db.DateTime, default=utils.get_now_datetime)
first_name = db.Column(db.String(80, convert_unicode=True))
last_name = db.Column(db.String(80, convert_unicode=True))
children = db.relationship('Child', backref='parent', cascade='all, delete')
toys = association_proxy('children', 'toys')
class Child(db.Model):
id = db.Column(db.Integer, primary_key=True)
parent_id = db.Column(db.Integer, db.ForeignKey('parent.id', ondelete='CASCADE'))
created_at = db.Column(db.DateTime, default=utils.get_now_datetime)
class Toy(db.Model):
id = db.Column(db.Integer, primary_key=True)
child_id = db.Column(db.Integer, db.ForeignKey('child.id', ondelete='CASCADE'))
created_at = db.Column(db.DateTime, default=utils.get_now_datetime)
child = db.relationship('Child', backref=db.backref("toys",cascade="all, delete-orphan", order_by="desc(Toy.id)"))
Ist diese Navigation von (Groß-) Großeltern nur zum Anzeigen oder auch zum Ändern der zugrunde liegenden Sammlungen? – van
@van ideal beide. –
OK, in diesem Fall, wie genau stellen Sie sich vor, der Gruppe "Spielzeug" hinzuzufügen? Wenn du 'my_group.toys.append (my_new_toy)', zu welchem 'Elternteil 'und' Kind 'wird es zugewiesen? – van