Как в Django запретить доступ к определенным полям пользователям?
Есть поля, которые не должны быть видны на форме и на странице для определенных пользователей. Как это можно настроить?
Для этого существуют, так называемые hidden поля. Они используются на форме но невидны на странице. Это относится к вопросу о видимости полей, а не об их отсутствии, для определенных пользователей. Конечно, вы можете настроить права доступа так, чтобы поля были либо hidden, либо нет.
Скрытые поля определяются непосредственно в ORM Django путем установки атрибута Field: editable = False
Например:
class MyModel(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=32, db_index=True, editable=False)
Однако, прямая установка или изменение полей модели не всегда возможна или выгодна. В принципе, следующая настройка в admin.py могла бы работать, но не будет работать, поскольку exclude является опцией InlineModelAdmin.
class MyModelAdmin(admin.ModelAdmin):
exclude = ('name',)
Если вы хотите сохранить значение в форме (например, установить значение, то есть пользователя, в зависимости от запроса) и скрыть поле, то вы можете изменить виджет на forms.HiddenInput().
class MyModelForm(forms.ModelForm):
class Init:
model = MyModel
fields = ('name', 'ext')
widgets = {'name': forms.HiddenInput()}