ユーザーがスーパーユーザーである場合に追加のフィールドを追加したい、非常にカスタマイズされた Django ModelAdmins がいくつかあります。get_fieldsets メソッドをこのようにオーバーライドするよう誰かが言っている場所を見つけました
def get_fieldsets(self, request, obj=None):
fieldsets = super(PageAdmin, self).get_fieldsets(request, obj)
if request.user.is_superuser:
fieldsets[0][1]['fields'].insert(0,'group')
fieldsets[0][1]['fields'].insert(2,'is_live')
else:
groups = request.user.page_groups.filter(
is_live = True,
)
if groups.count() > 1:
fieldsets[0][1]['fields'].insert(0,'group')
return fieldsets
これは (ある程度) 機能し、フィールドをフィールドセットにグループ化できるので、get_fieldsets を使用するのが好きです。フォームには、ユーザーに基づくクエリセットを持つユーザー固有のフォームフィールドがいくつかあるため、この管理者でも get_form を使用します。
def get_form(self, request, obj=None, **kwargs):
if request.user.is_superuser:
return PageForm
else:
form = RestrictedPageForm
form.owner = request.user #(this may be a bad way to do this but it works I think)
return form
今、スレッド化の問題であると思われる問題に直面しています。
ブラウザで change_form ページをすばやく更新すると、フォームに複数の「group」または「is_live」フィールドが表示されます。
管理者を利用してすべてを書く必要がないようにするのが本当に好きですが、これを正しく行う方法がわかりません。どんな助けや提案も大歓迎です!