1

编辑我在这里重新提出了问题

我想创建几个扩展的自定义用户模型django.contrib.auth.models.User,具有以下功能:

  • 一些特定领域

  • 一个不错的管理员,即,对于每个模型,我可以轻松自定义的管理表单(例如,显示/隐藏一些字段,包括父django.contrib.auth.models.User模型和子模型)。

我几乎设法用下面的代码做到了,但我仍然有一个问题:每次我想从管理员修改 MyUser1 或 MyUser2 的实例时都会清除密码。

这是最好的方法吗?如果是这样,我该如何解决这个清除密码问题?

模型.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

管理员.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

如果您想让用户输入 pass - 为 pass 添加新字段并在提交前检查它

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 回答