2013-02-14 17 views

risposta

13

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 
     } 
    } 
+9

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

6

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> 
7

provare questo:

class DisabledTextField(TextField): 
    def __call__(self, *args, **kwargs): 
    kwargs.setdefault('disabled', True) 
    return super(DisabledTextField, self).__call__(*args, **kwargs) 
8

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) 
+0

C'è un modo per impostarlo vai al seguito? form_widget_args = { 'type_values': { 'sola lettura': 'sola lettura' }} –

+0

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

+0

es. Form_overrides = dict (your_field_name = ReadonlyTextField) o possibilmente form_extra_fields = dict (your_field_name = ReadonlyTextField ('Etichetta', ...)) – pip

1

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 
     } 
    } 
Problemi correlati