Flask:如何从表单

时间:2018-05-31 19:06:26

标签: flask flask-sqlalchemy

我有两个具有一对多关系的模型

first_model

class Datacenter(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    number = db.Column(db.Integer)
    name = db.Column(db.String(64), index=True, unique=True)
    place = db.Column(db.String(64))
    capacity = db.Column(db.Integer, index=True)
    server = db.relationship('Server', backref='datacenter', lazy=True)
    tier = db.Column(db.Integer)

    def __repr__(self):
        return '<Datacenter {}>'.format(self.name)

second_models

class Server(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    number = db.Column(db.Integer)
    name = db.Column(db.String(64), index=True, unique=True)
    factory = db.Column(db.String(64), index=True)
    model = db.Column(db.String(64))
    serial = db.Column(db.Integer)
    os = db.Column(db.String(64))
    datacener_id=db.Column(db.Integer, db.ForeignKey('datacenter.id'), nullable=False)

    def __repr__(self):
        return '<Server {}>'.format(self.name)

但是,我不确定我是否在模型的字段中正确描述了它们之间的关系。 我所需要的只是创建一个与Datacenter模型连接的新服务器模型。

我认为这可以使用表单中的选择字段来完成。所以我创建了一个表单

class ServerForm(FlaskForm):

    number = IntegerField('Number')   
    name = StringField('Name')
    factory = StringField('Factory')
    model = StringField('Model')
    serial = IntegerField('Model')
    os = StringField('OS')
    datacener_id = SelectField('Datacener', choices=[ ???? ])

和路由器

@app.route('/add_server', methods = ['POST', 'GET'])
def add_server():
    form = ServerForm(request.form)
    if request.method=='POST' and form.validate():
        data = Server(
                number=form.number.data,
                name=form.name.data,
                factory=form.factory.data,
                model=form.model.data,
                serial=form.serial.data,
                os=form.os.data,
                datacener_id=form.datacener_id.data        
                          )
        db.session.add(data)
        db.session.commit()
        flash('Server created successfully!')
        return redirect('/')

    return render_template('new_server.html', form=form)

但是当我转到添加新模型的页面时,下拉列表为空。告诉我在代码中需要更改的内容

0 个答案:

没有答案