扩展Django的默认用户 如果你对Django的用户模型完全满意,并且只想添加一些其他配置文件信息,则可以简单地子类化django.contrib.auth.models.AbstractUser并添加自定义配置文件字段。此类提供默认用户的完整实现,作为抽象模型。。我创建了一个新模型,如下所示:
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 …)?
User
在研究Django源代码一段时间后,我发现了一个可行的灵魂。我对这种解决方案并不完全满意,但它似乎有效。欢迎提出更好的解决方案!
Django用于UserAdmin呈现User模型的漂亮管理员外观。通过在我们的admin.py-file文件中使用它,我们可以获得与模型相同的外观。
UserAdmin
admin.py-file
from django.contrib.auth.admin import UserAdmin admin.site.register(MyUser, UserAdmin)
但是,仅此方法可能不是一个好的解决方案,因为Django Admin将不会显示任何特殊字段。有两个原因:
UserChangeForm
formsets-
from django.contrib.auth.admin import UserAdmin from 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)