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

时间:2017-02-27 18:40:18

标签: python django python-2.7 django-models

我知道超级用户和普通用户都只是django的用户对象,但是如何编写一个自定义用户类,需要普通用户使用某些字段,并且不要求这些字段用于超级用户? / p>

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

数据库中没有任何结构是棘手的。例如,当应用程序增长时,JSONFields可能会非常难以驯服。

我会去尝试做到这一点"简单" - 更易于维护(我想如果您需要做类似的事情,您可能希望将来扩展模型)。如果这是一个新项目,您可以轻松change the default user model。但这可能会或可能不会帮助您解决问题。

您可以随时制作两个模型:

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)

然后make your own authentication backend

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