如果同一用户已经拥有同名的项目,我想限制特定表的数据库插入。
Table
_____________
user | place | label |
--------------------------------------------------------------------------
me | san francisco | work |
you | san francisco | leisure | # This is ok because different user
me | san francisco | leisure | # THIS IS NOT ALLOWED - INSERT FAIL
标签对用户来说是唯一的,所以我不希望“名称”列被强制唯一 - >许多用户应该能够添加相同的位置,但在他们想要的标签列中使用任何“标签”。
注意:使用Weppy - 我没有足够的声誉来创建新标签。一旦我可以/有一个 weppy 标签,我会标记这个问题。
我找到了一个似乎代码太多的解决方法。需要使用Place().add_new()
而不是内置的 pyDal 方法:
from weppy.dal import Model, Field, belongs_to
class Place(Model):
belongs_to('user')
name = Field() # not using `unique=True` here so others can insert same names.
label = Field()
def add_new(self, user_id, name, label):
user_places = self.db(self.db.Place.user == user_id).select()
current_names = [x.name for x in user_places]
if name not in current_names:
self.create(
user=user_id,
name=name,
label=label
)