使用Django auth UserAdmin创建自定义用户模型
扩展Django的默认用户 如果你对Django的用户模型完全满意,并且只想添加一些其他配置文件信息,则可以简单地子类化django.contrib.auth.models.AbstractUser
并添加自定义配置文件字段。此类提供默认用户的完整实现,作为抽象模型。。我创建了一个新模型,如下所示:
class MyUser(AbstractUser): some_extra_data = models.CharField(max_length=100, blank=True)
这在admin中几乎像Django的standard一样显示User
。但是,admin中最重要的区别是不存在password-(re)set字段,而是显示了普通的CharField。我真的必须重写admin-config中的内容才能使其正常工作吗?如果是这样,我怎么能以某种DRY的方式做到这一点(即,不从Django源中复制东西… eww …)?
回答:
在研究Django源代码一段时间后,我发现了一个可行的灵魂。我对这种解决方案并不完全满意,但它似乎有效。欢迎提出更好的解决方案!
Django用于UserAdmin
呈现User
模型的漂亮管理员外观。通过在我们的admin.py-file
文件中使用它,我们可以获得与模型相同的外观。
from django.contrib.auth.admin import UserAdminadmin.site.register(MyUser, UserAdmin)
但是,仅此方法可能不是一个好的解决方案,因为Django Admin将不会显示任何特殊字段。有两个原因:
UserAdmin
用途UserChangeForm
修改对象,这反过来使用时用作形式User作为其模型。UserAdmin
定义formsets-
属性,稍后由所使用- 该属性UserChangeForm
不包含你的特殊字段。因此,我创建了一个特殊的变更表,该表重载了Meta内部类,以便变更表使用正确的模型。我还必须重载UserAdmin才能将我的特殊字段添加到字段集,这是我不喜欢的解决方案的一部分,因为它看起来有点难看。随时提出改进建议!
from django.contrib.auth.admin import UserAdminfrom django.contrib.auth.forms import UserChangeForm
class MyUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = MyUser
class MyUserAdmin(UserAdmin):
form = MyUserChangeForm
fieldsets = UserAdmin.fieldsets + (
(None, {'fields': ('some_extra_data',)}),
)
admin.site.register(MyUser, MyUserAdmin)
以上是 使用Django auth UserAdmin创建自定义用户模型 的全部内容, 来源链接: utcz.com/qa/432542.html