Настойка: как добавить связанные модели «один ко многим» из форм - PullRequest
0 голосов
/ 31 мая 2018

У меня есть две модели с отношениями «один ко многим»

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)

Однако я не уверен, что правильно описал отношения между ними в полях модели.Все, что мне нужно, это создать новую модель сервера с подключением к модели центра обработки данных.

Я думаю, что это можно сделать с помощью поля выбора в форме.поэтому я создал форму

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)

Но когда я перехожу на страницу добавления новой модели, раскрывающийся список пуст.Скажите, что мне нужно изменить в моем коде

...