Python 在Django中,超级用户是否可能与非超级用户具有不同的必填字段?

Python 在Django中,超级用户是否可能与非超级用户具有不同的必填字段?,python,django,python-2.7,django-models,Python,Django,Python 2.7,Django Models,我知道超级用户和普通用户都只是django的用户对象,但我如何编写一个自定义用户类,它需要普通用户使用一些字段,而超级用户不需要这些字段?数据库中的任何结构都不复杂。例如,当应用程序增长时,jsonfield可能会被证明是极难驯服的 我会尝试让它变得“简单”-更易于维护(我想如果你需要做这样的事情,你可能希望在将来扩展模型)。如果这是一个新项目,你可以很容易。但这可能对你的案子有帮助,也可能没有帮助 您始终可以制作两个模型: from django.db import models from d

我知道超级用户和普通用户都只是django的用户对象,但我如何编写一个自定义用户类,它需要普通用户使用一些字段,而超级用户不需要这些字段?

数据库中的任何结构都不复杂。例如,当应用程序增长时,jsonfield可能会被证明是极难驯服的

我会尝试让它变得“简单”-更易于维护(我想如果你需要做这样的事情,你可能希望在将来扩展模型)。如果这是一个新项目,你可以很容易。但这可能对你的案子有帮助,也可能没有帮助

您始终可以制作两个模型:

from django.db import models
from django.contrib.auth.models import AbstractBaseUser

class Mortal(AbstractBaseUser):
    is_superuser = False

    username = models.CharField(max_length=256)
    first_name = models.CharField(max_length=256)
    last_name = models.CharField(max_length=256)

class Admin(AbstractBaseUser):
    is_superuser = True

    username = models.CharField(max_length=256)
然后:


您可以拥有一个配置文件类(比如UserProfile),该类具有用户的外键,只有在用户使用网站的注册表注册时才能创建。这样,在管理站点上或通过命令行创建的超级用户就不需要附加额外的配置文件实例。

可能的副本
class MyBackend(object):
    """
    Danger! A backend to authenticate only via username
    """

    def authenticate(self, username=None):
        try:
            return Mortal.objects.get(username=username)
        except Mortal.DoesNotExist:
            try:
                return Admin.objects.get(username=username)
            except Admin.DoesNotExist:
                return None