Как сделать у формы django поле «disabled» прямо в template?
Использую widget-tweaks (https://pypi.python.org/pypi/django-widget-tweaks) 
Там посмотри шаблонный тег attr. Им можно любой атрибут полю задавать
Это можно сделать в форме. Да и то, саму логику стоит писать во 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'})