Peewee 限制了 Field 中的 choices,为什么仍然可以插入其他数据?

2013-05-28 21:29:48 +08:00
 fen
最近看到 [Peewee](https://github.com/coleifer/peewee) 这个超简洁的 Python ORM,试着用了下,定义 User 模型:

```
USER_ROLE = ('user', 'admin')

class User(BaseModel):
username = CharField()
role = CharField(choices=USER_ROLE, default='user')
```

创建表单后插入数据,注意这个 role 并不在我的 [choices](http://peewee.readthedocs.org/en/latest/peewee/models.html#field-initialization-arguments) 里

```
k = User(username='admin', role='chairman')
k.save()
```

发现竟然插入成功了,可是我明明限制了 `choices` 啊,为什么会这样呢?
3141 次点击
所在节点    Python
2 条回复
cute
2013-05-29 07:57:15 +08:00
看了代码,发现choices定义了,但是后面没有使用.
楼主使用的应该是未完善的版本.
我使用的是之前自己修改的.
cute
2013-05-29 08:09:55 +08:00
其实可以这么声明一个就可以了.

class ChoiceField(peewee.CharField):
def db_value(self, value):
return value if value in self.choices else self.default

def python_value(self, value):
return value if value in self.choices else self.default

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/70443

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX