首页 文章

扩展Django中的用户配置文件 . 管理员创建用户

提问于
浏览
5

晚上好,

我目前正在使用Django创建一个站点,并使用用户配置文件扩展了用户 . 我有一个小问题 . 这是我的情况:

  • 我扩展了用户 Profiles 以添加自定义字段 .

  • 我将模型添加到用户管理模型,因此当我添加用户时,我可以直接填写字段来创建配置文件 .

  • 现在,如果我没有't add ANYTHING in these new custom user fields, in the user add page, Django Admin won'告诉我一个错误,说这些字段为空(并且它们不是假设的)

  • 我希望它在此用户添加管理页面中向我抛出错误,以便管理员在添加新用户时必须填写 Profiles .

  • 所有用户都将添加到管理面板中 .

这可能吗?非常感谢!

in admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin
from django.contrib.auth.models import User
from accounts.models import UserProfile


class UserProfileInline(admin.TabularInline):
    model = UserProfile


class UserAdmin(DjangoUserAdmin):
    inlines = [ UserProfileInline,]


admin.site.unregister(User)
admin.site.register(User, UserAdmin)

In model.py

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    employee_number = models.PositiveIntegerField(unique=True)

    def __unicode__(self):
        return 'Number'

1 回答

  • 5

    默认情况下,允许空内联,因此不会对空表单进行进一步检查 . 您需要手动覆盖它:

    class UserProfileForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            super(UserProfileForm, self).__init__(*args, **kwargs)
            if self.instance.pk is None:
                self.empty_permitted = False # Here
    
        class Meta:
            model = UserProfile
    
    
    class UserProfileInline(admin.TabularInline):         
        model = UserProfile                               
        form = UserProfileForm
    

相关问题