Django: Как получить текущего пользователя в администраторских формах

В ModelAdmin Django я должен отобразить формы, настроенные согласно полномочиям, которые имеет пользователь. Есть ли способ получить текущий пользовательский объект в класс формы, так, чтобы я мог настроить форму в __init__ метод?
Я думаю, сохраняя текущий запрос в локальном потоке, была бы возможность, но это будет моим последним средством, думают, что я думаю, что это - плохой подход дизайна....

46
задан Konrad Borowski 17 February 2018 в 23:32
поделиться

1 ответ

Думаю, я нашел решение, которое работает для меня: для создания 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
5
ответ дан 26 November 2019 в 20:25
поделиться
Другие вопросы по тегам:

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