В ModelAdmin Django я должен отобразить формы, настроенные согласно полномочиям, которые имеет пользователь. Есть ли способ получить текущий пользовательский объект в класс формы, так, чтобы я мог настроить форму в __init__
метод?
Я думаю, сохраняя текущий запрос в локальном потоке, была бы возможность, но это будет моим последним средством, думают, что я думаю, что это - плохой подход дизайна....
Думаю, я нашел решение, которое работает для меня: для создания ModelForm
Django использует метод администратора formfield_for_db_field
в качестве обратного вызова.
Поэтому я перезаписал этот метод в моем админке и передал текущий пользовательский объект в качестве атрибута с каждым полем (что, вероятно, не является самым эффективным, но кажется мне более чистым, чем использование threadlocals:
def formfield_for_dbfield(self, db_field, **kwargs):
field = super(MyAdmin, self).formfield_for_dbfield(db_field, **kwargs)
field.user = kwargs.get('request', None).user
return field
Теперь я могу получить доступ к текущему пользовательскому объекту в формы __ init __
с чем-то вроде:
current_user=self.fields['fieldname'].user