用于创建AbstractUser扩展mod的Django管理表单

2024-10-17 06:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个自定义用户模型,它扩展/继承AbstractUser。我也希望在管理中的用户创建表单匹配,但由于某些原因,我只能让它显示用户名和密码字段。没别的了。在

我发现特别有趣的是我在管理员py在创建表单中反映,但其他字段从未显示。例如,我可以更改password1的helptext或label,并将其呈现在表单中,但其他字段不会

另外,如果我设置了extenduseradmin并注册了它(如下面的代码所示),我会得到一个普通用户的3个字段创建视图,但是如果我扩展ModelAdmin,我会得到我所有的字段,但是不能使用密码更新表单。是404

值得注意的是,对象列表中的链接是“User”,而不是我的模型所称的“CommonUser”,但这可能是某个地方的类meta。在


管理员py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from models import CommonUser, Account, Registry
from django import forms


class MyUserChangeForm(UserChangeForm):
    class Meta(UserChangeForm.Meta):
        model = CommonUser


class MyUserCreationForm(UserCreationForm):

 password = forms.CharField(
    label='Password',
    max_length = 32,
    required=True,
    widget=forms.PasswordInput,
    )

password2 = forms.CharField(
    label='Confirm',
    max_length = 32,
    required=True,
    widget=forms.PasswordInput,
    help_text="Make sure they match!",
    )


class Meta(UserCreationForm.Meta):
    model = CommonUser
    fields = ['username', 'password', 'password2', 'email',
        'first_name','last_name','address','city','state','zipcode',
        'phone1','phone2',]
    help_texts = {
        'password': 'Must be at least 8 characters.',
    }


def clean_username(self):
    username = self.cleaned_data['username']
    try:
        CommonUser.objects.get(username=username)
    except CommonUser.DoesNotExist:
        return username
    raise forms.ValidationError(self.error_messages['duplicate_username'])


class MyUserAdmin(UserAdmin):
    form = MyUserChangeForm
    add_form = MyUserCreationForm
    fieldsets = UserAdmin.fieldsets + (
        ('Personal info', {'fields': ('address', 'phone1',)}),
    )

admin.site.register(CommonUser, MyUserAdmin)

(片段)模型.py

^{pr2}$

来源

Extending new user form, in the admin DjangoUsing Django auth UserAdmin for a custom user modelhttps://docs.djangoproject.com/en/1.6/topics/auth/customizing/#a-full-example


Tags: djangofrompy模型importauth表单admin
1条回答
网友
1楼 · 发布于 2024-10-17 06:25:57

用户管理员来自django.contrib.auth公司.admin还设置“add_fieldsets”属性,该属性设置要在“添加用户”视图中显示的字段。因为UserAdmin设置了这个字段,所以您需要覆盖它来设置您自己的字段。在

下面是一个例子:

class CustomUserAdmin(UserAdmin):
# ...code here...

    fieldsets = (
        (None, {'fields': ('email',)}),
        (_('Personal info'), {'fields': ('first_name', 'last_name')}),
        (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                       'groups', 'user_permissions')}),
        (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'first_name', 'last_name', 'password1',
                       'password2')}
         ),
    )

希望这有帮助!在

相关问题 更多 >