[Uliweb] Uliorm 的改进 作者 @limodou
>>> class User(Model):
... username = Field(CHAR, max_length=20)
... year = Field(int)
>>> class Group(Model):
... name = Field(str, max_length=20)
... users = ManyToMany(User, reference_fieldname='username', reversed_fieldname='name')
reference_fieldname为目标Model User中的字段,而reversed_fieldname则为Group本身的字段。同时实现了类似django的through的参数功能,如:
>>> class User(Model):
... username = Field(CHAR, max_length=20)
... year = Field(int)
>>> class Group(Model):
... name = Field(str, max_length=20)
... users = ManyToMany(User, through='relation')
>>> class Relation(Model):
... user = Reference(User)
... group = Reference(Group)
... year = Field(int)
再复杂点:
class User(Model):
username = Field(CHAR, max_length=20)
year = Field(int)
class Group(Model):
name = Field(str, max_length=20)
users = ManyToMany(User, through='relation')
class Relation(Model):
user = Reference(User, reference_fieldname='username')
group = Reference(Group, reference_fieldname='name')
year = Field(int)
这样可以通过自定义第三张表来添加额外的字段,一些使用方法如下:
#添加关系
r1 = Relation(user=a, group=g1, year=10)
r1.save()#条件
g1.users.filter(Relation.c.year>5)
对于第三张表的定义,由于只能是先定义后使用,因此有点hack的处理,不知道会不会有问题。随着项目使用进行验证吧。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。