Association Proxy是一个SQLALchemy扩展,它支持使用从关系类型派生的聚合集合将属性从一个ORM类代理到另一个ORM类
我希望我的表Item
有两个关联代理,一个用于属性class_
,另一个用于属性object_
(在本例中命名这样的代理是为了让您直观地看到多个对象对应于一个类)。现在,我希望在对应于表ItemsGroup
的ORM对象中有一组名为classes
的类和一个名为objects
的列表。能给我这个吗
from sqlalchemy.ext.associationproxy import association_proxy
class ItemsGroup(db.Model):
id = db.Column(db.Integer, primary_key=True)
items = db.relationship("Item")
# I want this proxy to be represented as a set
classes = association_proxy('items', 'class_')
# and this to be represented as a list
objects = association_proxy('items', 'object_')
class Item(db.Model):
group_id = db.Column(db.Integer, db.ForeignKey(ItemsGroup.id))
class_ = db.Column(db.Enum('Class I', 'Class 'II', 'Class III'))
object_ = db.Column(db.String(64))
现在,我知道这个表模式并不理想(未规范化)。我也明白,如果我们试图修改代理值(当修改通过ItemsGroup.classes
访问的值时,我们不知道要修改哪个Item.class_
),这可能不会起到很好的作用。但无论如何,我对这样做很感兴趣
我可以设置关系的collection_class=set
,但是objects
将不再是列表。我天真地尝试在关联代理中设置creator=set
,但也不起作用
这是可能的还是我需要创建一个混合属性?如果有一个诀窍使这项工作,它会是首选的混合财产
目前没有回答
相关问题 更多 >
编程相关推荐