Django: Как сделать поля не редактируемыми по умолчанию в встроенной модели Formet?
У меня есть встроенный модельный набор форм, и я хотел бы сделать поля не редактируемыми, если эти поля уже имеют значения при загрузке страницы. Если пользователь нажмет кнопку "Изменить" в этой строке, он станет доступен для редактирования и (используя JavaScript), я бы заменил исходные виджеты на редактируемые. Я бы хотел сделать что-то подобное при загрузке страницы:
for field in form.fields:
if field.value:
# display as text
else:
# display as my standard editable widget for this field
Я вижу, что inlineformset_factory
имеет аргумент formfield_callback
. Я подозреваю, что это может быть полезно, но я так и не нашел для него никакой документации. Может ли кто-нибудь указать мне какую-нибудь полезную документацию для этого и как она может помочь мне решить эту проблему?
Ответы
Ответ 1
Этот меня тоже немного насторожил. Надеюсь, это то, что вы ищете.
<TABLE>
<form method="post" action=".">
{{ formset.management_form }}
{% for form in formset.forms %}
{{ form.id }}
<tr>
<td>{{ form.FirstName }}</td> <!-- This is a normal, editable field -->
<td>{{ form.instance.LastName }}</td> <!-- 'instance' is your actual Django model. LastName displays the text from the last name field -->
</tr>
{% endfor %}
</form>
</TABLE>
Ответ 2
Этот поток немного устарел, но для тех, кто ищет:
в виде:
myfield=forms.CharField( widget=forms.TextInput(attrs={'class':'disabled', 'readonly':'readonly'}))
"readonly" - это атрибут HTML, который делает форму неизменной.
"disabled" - это класс CSS, поскольку вы хотите изменить стиль по умолчанию, а также упростить jQuery.
Чтобы сделать readonly входы, редактируемые при нажатии, вот пример jQuery:
$('input.disabled').click(function(){
$(this).removeAttr('readonly').removeClass('disabled');
});
Ответ 3
Я думаю, что вы можете переопределить функцию init вашей формы, которая используется в наборе форм. Там вы можете проверить исходные_данные и динамически создавать свои формы, как вы надеетесь сделать. По крайней мере, это звучит правдоподобно в моей голове.
Ответ 4
У меня возник вопрос, где я хочу "Автоматическое создание полей формы", может найти решение для динамического создания форм, это может помочь:
Автоматическое создание полей формы для формы в django
Он не чист и, вероятно, лучший способ справиться с этим.
Как просто отправить данные как редактируемые (нормальные формы) из django и выполнить проверку значения с помощью javascript, используя javascript для переключения виджетов?