@mrkovalchuk
Junior developer

Как сделать у формы django поле «disabled» прямо в template?

Добречка, господа.

Задача звучит следующим образом: необходимо в зависимости от наличия\не наличия определенного права у пользователя показывать ему активные\неактивные поля.

Подскажите, могу ли я сделать поле у формы "disabled" на бегу, в template?
<div class="col-md-12">
   {% if perms.foo.change_datasettings %}
      {% for field in setting_form %}
          {{ field.label_tag }} {{ field }}
      {% endfor %}
   {% else %}
      {% for field in form %}
          {{ field.label_tag }} {{ field.disabled }}
      {% endfor %}
{% endif %}
</div>


Спасибо.
  • Вопрос задан
  • 896 просмотров
Решения вопроса 1
@JonGalt
Использую widget-tweaks (https://pypi.python.org/pypi/django-widget-tweaks)
Там посмотри шаблонный тег attr. Им можно любой атрибут полю задавать
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Это можно сделать в форме. Да и то, саму логику стоит писать во view. Сначала передать форме аргумент, который определяет, делать ли поля disabled. А затем, уже в форме, проставлять атрибуты полям.

class MyView(...):
    form_class = MyForm

    def get_form_kwargs(self, ...):   # название метода условно, не уверен, что он так называется в generic views и даже что он есть :)
        kwargs = super(MyView, self).get_form_kwargs(...)
        kwargs.update({'disabled': not self.request.user.has_perm(...)})
        return kwargs

class MyForm(...):
    def __init__(self, *args, **kwargs):
        is_disabled = kwargs.pop('disabled')
        super(MyForm, self).__init__(*args, **kwargs)

        if is_disabled:
            self.fields['foo'].widget.attrs.update({'disabled': 'disabled'})
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы