es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Propiedad de relación filtrada de SQLAlchemy

Estoy buscando una manera de tener una propiedad filtrada para una relación más general, tal vez mejor explicada en algún código:

class Content(db.Model)
    id = db.Column(db.Integer(), primarykey=True)
    title = db.Column(db.String(255))
    collectionid = db.Column(db.ForeignKey("collection.id"), nullable=False)
    type = db.Column(db.String(64), nullable=False, index=True)
    weight = db.Column(db.Integer())

class Collection(db.Model):
    id = db.Column(db.Integer(), primarykey=True)
    items = db.relationship(
        "Content",
        backref="collection",
        collectionclass=sqlalchemy.ex.orderinglist.ordering_list("weight")
    )
    poems = "items filtrados por type='poem'"

Colección.poems debería comportarse exactamente de la misma manera que Collection.items excepto por estar filtrados. Esto significa idealmente que las operaciones de escritura se propagarían entre las dos:

python
colección = Colección(items=[
Content(title=”foo”, type=”other”),
Content(title=”bar”, type=”poem”),
])
assert [c.title for c in collection.items] == [“foo”, “bar”]
assert [c.title for c in collection.poems] == [“bar”]
collection.poems.append(Content(title=”baz”, type=”poem”))
assert [c.title for c in collection.items] == [“foo”, “bar”, “baz”]

He intentado:

Usando una hybrid_property pero, por supuesto, la adición de nuevos elementos no funcionó de esta manera.

Usando una db.relationship() separada, pero entonces las colecciones de relaciones no se poblaron entre sí.

Tags:  , ,

Answer

Comments are closed.