1

編集ここで質問を再定式化しました

django.contrib.auth.models.User次の機能を備えた、 を拡張するカスタム ユーザー モデルをいくつか作成したいと考えています。

  • いくつかの特定のフィールド

  • つまり、モデルごとに、簡単にカスタマイズできる管理フォームです (たとえば、親django.contrib.auth.models.Userモデルと子モデルの両方からいくつかのフィールドを表示/非表示にします)。

以下のコードでほとんどできましたが、まだ問題があります。管理者から MyUser1 または MyUser2 のインスタンスを変更するたびに、パスワードがクリアされます。

それはそれを行うための最良の方法ですか?もしそうなら、どうすればこのクリアされたパスワードの問題を解決できますか?

models.py

from django.db import models
from django.contrib.auth.models import User

class MyUser1(User):
    #add more fields specific to MyUser1

class MyUser2(User):
    #add more fields specific to MyUser2

admin.py

    class MyUser1AdminForm(forms.ModelForm):

        class Meta:
            model = MyUser1

        def __init__(self, *args, **kwargs):
            super(MyUser1AdminForm, self).__init__(*args, **kwargs)
            self.fields['password'].widget = forms.PasswordInput()

        def save(self, commit=True):
            user = super(MyUser1AdminForm, self).save(commit=False)
            user.set_password(self.cleaned_data["password"])
            if commit:
                user.save()
            return user


    class MyUser1Admin(admin.ModelAdmin):
        form = MyUser1AdminForm


    admin.site.register(MyUser1, MyUser1Admin)

# same for MyUser2
4

1 に答える 1

1

ユーザーにパスを入力させたい場合 - パス用の新しいフィールドを追加し、コミットする前に確認します

class MyUser1AdminForm(forms.ModelForm):

    check_pass = forms.CharField(label="Password",widget = forms.PasswordInput(), required=True)

    class Meta:
        model = MyUser1
        exclude = ('password',)

    def save(self, commit=True):
        user = super(MyUser1AdminForm, self).save(commit=False)
        if commit and user.check_password(self.cleaned_data["check_pass"]):
            user.save()
        return user
于 2012-12-11T20:45:24.900 に答える