Django: сделать форму поля доступной для чтения (не работает, поскольку я использую помощник django-crispy)
Я пытаюсь настроить поля формы с помощью django-crispy. Но я могу сделать свои поля "доступными для чтения".
До использования django-crispy FormHelper я использовал атрибут поля формы disabled и он хорошо работает.
Теперь я хочу использовать помощник django-cripy для горизонтального отображения кнопок опций, но атрибут disabled не работает.
Я пробовал использовать атрибут whidget readonly, но ни то, ни другое не работает.
Я также попробовал решение https://github.com/django-crispy-forms/django-crispy-forms/issues/47, но получил ошибку Could not parse the remainder: ' form.pat readonly True' from 'crispy_field form.pat readonly True'
Когда я отображаю шаблон, поле eli_dat корректно отключается (readonly), но не eli_oui_ebo радиокнопки...
forms.py
class EligibiliteForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.IDE = kwargs.pop("ide", None)
self.PATIENT = kwargs.pop("patient", None)
self.USER = kwargs.pop("user", None)
super(EligibiliteForm,self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-lg-7'
self.helper.layout = Layout(
'pat',
Field(
AppendedText(
'eli_dat',
mark_safe('<span data-feather="calendar"></span>'),
)
),
InlineRadios('eli_oui_ebo'),
)
if self.PATIENT == None:
FORM_LOCK = Eligibilite.objects.get(ide = self.IDE).ver
else:
FORM_LOCK = False # Form can not be locked at creation
**DISABLED = False**
INITIAL = None
if self.PATIENT != None:
print("form - create")
FORM_LOCK = False
**DISABLED = False**
INITIAL = Patient.objects.get(ide=self.PATIENT.ide)
elif self.PATIENT == None and not FORM_LOCK:
print("form - update not locked")
**DISABLED = False**
INITIAL = None
elif self.PATIENT == None and FORM_LOCK:
**DISABLED = True**
INITIAL = None
self.fields["pat"] = forms.ModelChoiceField(queryset = Patient.objects.all(),widget=forms.HiddenInput(), label = "Patient", initial=INITIAL)
# insert forms fields
self.fields['eli_dat'] = forms.DateField(label = 'Date (de remplissage)',widget=forms.TextInput(attrs={'autocomplete': 'off'}),required=False, disabled=DISABLED)
self.fields['eli_oui_ebo'] = forms.TypedChoiceField(label = 'A eu, dans les 72h, un contact avec un malade Ebola confirmé par RT-PCR',widget=forms.RadioSelect(attrs={'readonly': True}),required=False,choices=[i for i in Thesaurus.options_list(1,'fr') if i != (None,'')], disabled=DISABLED)
template.html
<form id="id-form" method="post">
{% csrf_token %}
{% crispy form %}
</form>