У меня есть сложные пользовательские разрешения для моих пользователей. Но чтобы сделать мысли проще, давайте представим себе, что для каждого пользователя есть только read-only
или write
.Создание форм Django формы return.instance в шаблонах
Я использую формы Django для редактирования и сохранения объектов модели. И моя цель заключается в рендеринге <input>
в шаблоне HTML Django для тех пользователей, у которых есть разрешение на редактирование экземпляра данной модели, и жестко закодированные данные (без тега <input>
), если у пользователя есть только разрешение только для чтения.
В настоящее время у меня есть следующий код в моем шаблоне Django для достижения этой цели:
{%if user.has_permission_to_edit %}
{{my_form.my_field}}
{% else %}
{{my_form.instance.my_field}}
{% endif %}
И вот my_form
:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.widget.attrs['class'] = 'form-control input-sm'
if field.required == True:
field.widget.attrs['required'] = ''
class Meta:
model = MyModel
fields = ('my_field',)
Проблема с кодом в шаблоне, что я должен используйте несколько блоков {% if%} {% else%}. Я относительно новичок в Django, и я знаю, что существует множество передовых инструментов, делающих код Django потенциально супер DRY, поэтому я хочу спросить вас, ребята, какой самый DRY-метод для организации того, что я описал в шаблоне. В частности, есть ли способ сделать Django-формы возвращать значения экземпляров на основе некоторого условия, указанного внутри определения формы? Или мне нужно использовать определенный тег? Или, возможно, для достижения таких целей используется какая-то совершенно другая архитектура?
Я не уверен, что понимаю, чего вы хотите достичь? Вы редактируете объект модели? Как изменяется поведение, если у пользователя есть разрешение на редактирование? – AKS
Какой тип поля это, где вы хотите отображать жестко заданные значения? Это текстовое поле? – AKS
Ну, это может быть текстовое поле, числовое значение, флажок ... Все. Основываясь на типе соответствующего типа поля модели –