Я хочу переопределить форму модели Matriline
, показанной ниже.on_form_prefill удалять все значения полей, если он выполняет form.process
Сначала я добавляю дополнительное поле clan
, а также в on_form_prefill
Я сбрасываю выбор этого поля и по умолчанию (только тестирование).
Не вызывая form.process
, у меня установлены новые параметры, но параметр по умолчанию не выбран.
Если вы звоните form.process
, то на выбор устанавливаются мои новые параметры и выбирается опция по умолчанию, но все остальные поля удаляются.
Любой может помочь?
views.py
class MatrilineAdmin(sqla.ModelView):
form_extra_fields = {
'clan': SelectField('Clan',
coerce=int,
choices=[ (c.id, c.name) for c in Clan.query.all()])
}
create_template = 'admin/create.html'
edit_template = 'admin/edit.html'
def on_form_prefill(self, form, id):
form.clan.choices = [(1, "first"),(2,"second")]
form.clan.default = 2
form.process() # if commented, set choices but does not set default
# else set choices and default but delete all the other fields values (name and pod_id)
models.py
class Matriline(db.Model):
__tablename__ = 'matriline'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(64))
calls = db.relationship('Call', backref='matriline', lazy='select')
pod_id = db.Column(db.Integer, db.ForeignKey('pod.id'))
def __unicode__(self):
return self.name
def __str__(self):
return self.name
class Pod(db.Model):
__tablename__ = 'pod'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(64))
matrilines = db.relationship('Matriline', backref='pod', lazy='select')
clan_id = db.Column(db.Integer, db.ForeignKey('clan.id'))
def __unicode__(self):
return self.name
def __str__(self):
return self.name
class Clan(db.Model):
__tablename__ = 'clan'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(64))
pods = db.relationship('Pod', backref='clan', lazy='select')
def __unicode__(self):
return self.name
http://stackoverflow.com/questions/28620219/setting-a-default-on-a-select -removes-the-settings-pass-in-to-populate-the-for – user2990084
@ user2990084: С точки зрения WTForms ясно, что мы должны передавать конструкторы по умолчанию. При использовании flask_admin это иногда не является опцией, так как форма генерируется вверх и кэшируется. – zwirbeltier