В моем приложении у меня есть Пользователи и Сообщения в качестве моделей. Каждый пост имеет внешний ключ к имени пользователя. Когда я создаю ModelView поверх моей модели сообщений, я могу создавать сообщения как определенные пользователи в интерфейсе администратора. как видно на скриншоте ниже
После того, как я добавил сообщение и нажал "Сохранить и добавить другое", "Пользователь" возвращается к "user1". Как я могу заставить форму помнить предыдущее значение "user2"?
Мои исследования привели меня к мысли, что это можно сделать, изменив on_model_change и on_form_prefill и сохранив предыдущее значение в сеансе фляги, но, похоже, это слишком сложная задача. Должен быть более простой способ.
Мой код можно увидеть ниже
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import flask_admin
from flask_admin.contrib import sqla
app = Flask(__name__)
db = SQLAlchemy()
admin = flask_admin.Admin(name='Test')
class Users(db.Model):
"""
Contains users of the database
"""
user_id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True, nullable=False)
def __str__(self):
return self.username
class Posts(db.Model):
"""
Contains users of the database
"""
post_id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(11), db.ForeignKey(Users.username), nullable=False)
post = db.Column(db.String(256))
user = db.relation(Users, backref='user')
def build_sample_db():
db.drop_all()
db.create_all()
data = {'user1': 'post1', 'user1': 'post2', 'user2': 'post1'}
for user, post in data.items():
u = Users(username=user)
p = Posts(username=user, post=post)
db.session.add(u)
db.session.add(p)
db.session.commit()
class MyModelView(sqla.ModelView):
pass
if __name__ == '__main__':
app.config['SECRET_KEY'] = '123456790'
app.config['DATABASE_FILE'] = 'sample_db.sqlite'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database'
app.config['SQLALCHEMY_ECHO'] = True
db.init_app(app)
admin.init_app(app)
admin.add_view(MyModelView(Posts, db.session))
with app.app_context():
build_sample_db()
# Start app
app.run(debug=True)