Есть две модели Datacener и Server с общей связью ForeigKey, при попытке создать новую модель Server, форма не проходит валидацию. При выводе в шаблон form.errors - получаю "Datacener: Not a valid choice".
class Datacener(db.Model):
id = db.Column(db.Integer, primary_key=True)
server = db.relationship('Server', backref='datacener', lazy=True)
tier = db.Column(db.Integer)
...
class Server(db.Model):
id = db.Column(db.Integer, primary_key=True)
os = db.Column(db.String(64))
...
datacener_id=db.Column(db.Integer, db.ForeignKey('datacener.id'), nullable=False)
@app.route('/add_server', methods = ['POST', 'GET'])
@login_required
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)
class ServerForm(FlaskForm):
number = IntegerField('Number')
name = StringField('Name')
factory = StringField('Factory')
model = StringField('Model')
serial = IntegerField('Serial')
os = StringField('OS')
datacener_id = SelectField('Datacener', choices=[(x.id, x.name) for x in db.session.query(Datacener).all()])
В django связи работают легко и непринужденно, здесь же я лопачу интернет уже который час и не могу найти толкового описания по связанным моделям, хотя задача по идее обыденная. Очень нужна помощь.
Еще попробовал такой вариант формы
class ServerForm(FlaskForm):
number = IntegerField('Number')
name = StringField('Name')
factory = StringField('Factory')
model = StringField('Model')
serial = IntegerField('Serial')
os = StringField('OS')
datacener_id = SelectField()
#datacener_id = SelectField('Datacener', choices=[(x.id, x.name) for x in db.session.query(Datacener).all()])
def __init__(self, *args, **kwargs):
self.datacener_id.kwargs['choices'] = [(x.id, x.name) for x in db.session.query(Datacener).all()]
FlaskForm.__init__(self, *args, **kwargs)
С ним немного изменился вывод form.errors - получаю "Datacener
Id: Not a valid choice".