Come posso rendere un campo su un ModelView
in sola lettura?Campo di testo di sola lettura in Flask-Admin ModelView
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
Come posso rendere un campo su un ModelView
in sola lettura?Campo di testo di sola lettura in Flask-Admin ModelView
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
Se stai parlando di Flask-Admin con i modelli SQLAlchemy, e si sta dichiarando una vista ereditando dalla sqlamodel.ModelView, si può semplicemente aggiungere questo a La definizione della classe:
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
form_widget_args = {
'email':{
'disabled':True
}
}
Quando si visualizza il campo nel modello Jinja, basta passare in disabled=true
se WTForms non riconosce la kwarg, passa solo che sia un attributo per l'elemento HTML.
<form>
{{ form.example(disabled=True) }}
</form>
provare questo:
class DisabledTextField(TextField):
def __call__(self, *args, **kwargs):
kwargs.setdefault('disabled', True)
return super(DisabledTextField, self).__call__(*args, **kwargs)
non ho abbastanza fama di commentare @ di thkang risposta, che è molto vicino a quello che ha funzionato per me. L'attributo disabled
esclude il campo dai dati POST, ma l'utilizzo di readonly
ha avuto l'effetto desiderato.
from wtforms.fields import TextField
class ReadonlyTextField(TextField):
def __call__(self, *args, **kwargs):
kwargs.setdefault('readonly', True)
return super(ReadonlyTextField, self).__call__(*args, **kwargs)
C'è un modo per impostarlo vai al seguito? form_widget_args = { 'type_values': { 'sola lettura': 'sola lettura' }} –
Lawrence, vorrei specificare form_extra_fields come lo stesso nome del campo che si desidera essere di sola lettura e sarà ignorare questo campo. – pip
es. Form_overrides = dict (your_field_name = ReadonlyTextField) o possibilmente form_extra_fields = dict (your_field_name = ReadonlyTextField ('Etichetta', ...)) – pip
ho avuto strani errori quando ho provato ad utilizzare disabled
per i campi di testo, quindi ho usato readonly
invece:
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
form_widget_args = {
'email':{
'readonly':True
}
}
questo potrebbe non essere ciò che si desidera. L'ho implementato, ma ho notato che i campi disattivati stavano diventando ** cancellati ** all'invio. Quando ho usato 'readonly', invece, ho ottenuto il comportamento atteso (il valore non cambia). – Ian