私は継承したdjangoプロジェクトに取り組んでおり、ユーザーの 'is_staff'属性を設定するときに検証を追加したいと考えています。私はどのように考え出すことができません...UserChangeFormに自分自身の 'clean_is_staff'を提供するには?
私の目標は、通常のユーザー(この場合、学生)に誤って 'is_staff'特権を与えられないようにすることです。これは、この悪いことをしないように既存の管理者を訓練する以上の余分な保護です。
プロジェクトは標準のauth.userを使用し、独自のProfileクラスを持っています。それはすべて正常に動作します。学生が登録すると、UserオブジェクトとProfileオブジェクトが登録されます。スタッフのユーザーは、Admin UIで標準の「新規ユーザーの追加」アクションを使用して、管理者のみが作成する必要があります。
ところで、これはDjango 1.8です。
私は、管理者が 'is_staff'をTrueに設定して変更を保存しようとしたときに、編集中のユーザーにプロファイルオブジェクトがある場合、カスタム 'clean_is_staff()'メソッドを追加してValidationErrorを発生させます。
私は、ValidatingUserChangeFormのコードパスを持つために、 'ValidatingUserChangeForm'をUserChangeFormのサブクラスとして書き、論理を入れ、 'ValidatingUserAdmin'と書きました。
これは機能しません。私のValidatingUserAdminは正常に動作するようですが、私のValidatingUserChangeFormは無視されます。私はそれが私の責任であると確信しています。
この投稿にコメントで出力します。
from change.forms import ValidatingUserChangeForm
class ValidatingUserAdmin(admin.ModelAdmin):
def __init__(self, name='admin', app_name='admin'):
super(ValidatingUserAdmin, self).__init__(self, name='admin', app_name='admin')
def get_form(self, request, obj=None, **kwargs):
form = super(ValidatingUserAdmin, self).get_form(request, obj, **kwargs)
###logger.debug("ValidatingUserAdmin::get_form(): about to return '{0}'".format(form))
return form
admin.site.unregister(User)
admin.site.register(User, ValidatingUserAdmin)
そしてforms.py:あなたはclean_is_staff
方法で
def clean_is_staff(self):
value = self.cleaned_data["is_staff"]
# do code here to check for a Profile object for this user.
return value
あなたは私の問題を解決しました。ありがとう。 –