-1

我有一个简单的模型,如下所示,我有一个游戏列表,我希望所有玩家从游戏列表中分配一个且只有一个游戏。我将如何在 sqlalchemy 中做到这一点。截至目前,我正在使用flask sqlalchemy,但问题并不限于flask-sqlalchemy。

games = ['soccer', 'hockey', 'baseball', 'cricket', 'basketball']

from flask.ext.sqlalchemy import SQLAlchemy

class Gamer(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    team_name = db.Column(db.String(80))
    game_name = db.Column(db.String(80))
    game = db.Column(db.String(80), i want only games from the list of games)

在这里可以找到类似的 django 功能。

4

1 回答 1

0

首先,您提到的 django 功能与您列出的模型并不真正相似。这样做的原因Gamer是一个modelwhileSimpleForm是一个 UI form

但是,以下是您可以验证的几种方法model

1) 为 创建一个单独的选项卡Games,将值添加为行,并创建N-to-1Gamer到 的关系Game。这是可读的,并将在业务和数据库级别验证您的数据

class Game(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))

class Gamer(db.Model):
    # ...
    game_id = db.Column(db.Integer, ForeignKey('game.id'))
    game = relationship(Game)

2)创建和使用一个简单的验证器

from sqlalchemy.orm import validates
class Gamer(db.Model):
    # ...
    @validates('game')
    def validate_game(self, key, address):
        assert address in games
        return address

edit-1:或者,看看The Enum Recipe。但这又是在模型级别上,而不是 UI 验证。

于 2012-05-09T07:34:05.133 回答