Jak mogę utworzyć pole tylko do odczytu na ModelView
?Pole tekstowe tylko do odczytu w Flask-Admin ModelView
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
Jak mogę utworzyć pole tylko do odczytu na ModelView
?Pole tekstowe tylko do odczytu w Flask-Admin ModelView
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
Jeśli mówisz Kolby-admin z sqlalchemy Models, a ty deklarując widok przez dziedziczenie z sqlamodel.ModelView, można po prostu dodać do Twoja definicja klasy:
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
form_widget_args = {
'email':{
'disabled':True
}
}
Podczas renderowania pola w szablonie Jinja, tylko przechodzą w disabled=true
jeśli WTForms nie rozpoznaje kwarg, to po prostu przechodzi, że jest to atrybut do elementu html.
<form>
{{ form.example(disabled=True) }}
</form>
spróbuj tego:
class DisabledTextField(TextField):
def __call__(self, *args, **kwargs):
kwargs.setdefault('disabled', True)
return super(DisabledTextField, self).__call__(*args, **kwargs)
Nie mam wystarczającej reputacji, aby skomentować odpowiedź @ thkanga, która jest bardzo bliska temu, co dla mnie zadziałało. Atrybut disabled
wyklucza pole z danych POST, ale użycie readonly
przyniosło pożądany efekt.
from wtforms.fields import TextField
class ReadonlyTextField(TextField):
def __call__(self, *args, **kwargs):
kwargs.setdefault('readonly', True)
return super(ReadonlyTextField, self).__call__(*args, **kwargs)
Czy jest jakiś sposób, aby ustawić to vai the follow? form_widget_args = { 'type_values': { 'tylko do odczytu': 'tylko do odczytu' } } –
Lawrence, chciałbym podać form_extra_fields jak o tej samej nazwie jak pole, które chcesz mieć readOnly i zastąpi on to pole. – pip
tj. Form_overrides = dict (nazwa_pocztowa = ReadonlyTextField) lub ewentualnie form_extra_fields = dict (nazwa_pliku = ReadonlyTextField ('Label', ...)) – pip
mam dziwne błędy, kiedy próbował użyć disabled
dla pól tekstowych, więc użyłem readonly
zamiast:
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
form_widget_args = {
'email':{
'readonly':True
}
}
To może nie być, co chcesz. Zaimplementowałem to, ale zauważyłem, że pola, które zostały wyłączone, zostały ** skasowane ** po przesłaniu. Kiedy zamiast tego użyłem 'readonly', otrzymałem oczekiwane zachowanie (wartość się nie zmienia). – Ian