Skip to main content
 首页 » 编程设计

python之在 Django 中, super 用户是否可以拥有与非 super 用户不同的必填字段

2024年10月01日31haluo1

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

请您参考如下方法:

数据库中没有任何结构是棘手的。例如,随着应用程序的增长,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