方式1, OneToOneField
from django.contrib.auth.models import User
class UserProfile(models.Model): user = models.OneToOneField(User) major = models.TextField(default='', blank=True) address = models.CharField(max_length=200,default='',blank=True)

AUTH_PROFILE_MODULE = 'djangoadmin.myadmin.UserProfile'

class ProfileInline(admin.StackedInline): model = UserProfile #fk_name = 'user' max_num = 1 can_delete = False class CustomUserAdmin(UserAdmin): inlines = [ProfileInline,] admin.site.unregister(User) admin.site.register(User, CustomUserAdmin)
方式2,AbstractUser
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): nid = models.AutoField(primary_key=True) nickname = models.CharField(verbose_name='昵称', max_length=32) telephone = models.CharField(max_length=11, null=True, unique=True) avatar = models.FileField(upload_to='avatar/', default="/avatar/default_avatar.jpg") create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
Settings.py:
AUTH_USER_MODEL = "user.UserInfo"
方式3,Signal
from django.db import models from django.contrib.auth.models import User, UserManager from .signals import * class CustomUser(User): description = models.TextField(max_length=256, default="",blank=True) headImage = models.ImageField(upload_to='/media/image/users/',null=True, blank=True) scope = models.IntegerField(default=100) objects = UserManager()
# signal.py from django.db.models.signals import post_save from django.contrib.auth.models import User def create_user_detail(sender, instance, signal, *args, **kwargs): from .models import CustomUser if kwargs['created']: u = CustomUser() u.__dict__.update(instance.__dict__) u.save() post_save.connect(create_user_detail, sender=User)
Settings.py
CUSTOM_USER_MODEL = 'UserProfile.CustomUser'
自定义认证

from django.conf import settings from django.contrib.auth.backends import ModelBackend from django.core.exceptions import ImproperlyConfigured from django.db.models import get_model class CustomUserModelBackend(ModelBackend): def authenticate(self, username=None, password=None): try: user = self.user_class.objects.get(username=username) if user.check_password(password): return user except self.user_class.DoesNotExist: return None def get_user(self, user_id): try: return self.user_class.objects.get(pk=user_id) except self.user_class.DoesNotExist: return None @property def user_class(self): if not hasattr(self, '_user_class'): self._user_class = get_model(*settings.CUSTOM_USER_MODEL.split('.', 2)) if not self._user_class: raise ImproperlyConfigured('Could not get custom user model') return self._user_class
settings.py

AUTHENTICATION_BACKENDS = ( 'myproject.auth_backends.CustomUserModelBackend', )