簡體   English   中英

如何在 django 用戶 model 中生成隨機唯一用戶 ID 值並將其顯示在 django 管理員上?

[英]How can I generate a random unique User id value in django user model and show it on django admin?

我在 Django 中有一個 Model。 我剛剛擴展了 AbstractBaseUser 並在 BaseUserManager 中添加了一些自定義字段。

現在我需要生成一個唯一的 Id 作為主鍵,並需要在 Django 管理員上顯示它。 我怎樣才能做到這一點? 我的 model 如下所示。

from django.db import models
from django.contrib.auth.models import AbstractBaseUser,PermissionsMixin,BaseUserManager



class CustomUserManager(BaseUserManager):
    def _create_user(self, email, password, first_name, last_name, mobile, **extra_fields):
        if not email:
            raise ValueError("Email must be provided")
        if not password:
            raise ValueError('Password is not provided')

        user = self.model(
            email = self.normalize_email(email),
            first_name = first_name,
            last_name = last_name,
            mobile = mobile,
            **extra_fields
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_user(self, email, password, first_name, last_name, mobile, **extra_fields):
        extra_fields.setdefault('is_staff',True)
        extra_fields.setdefault('is_active',True)
        extra_fields.setdefault('is_superuser',False)
        return self._create_user(email, password, first_name, last_name, mobile, password, 
**extra_fields)

    def create_superuser(self, email, password, first_name, last_name, mobile, 
**extra_fields):
        extra_fields.setdefault('is_staff',True)
        extra_fields.setdefault('is_active',True)
        extra_fields.setdefault('is_superuser',True)
        return self._create_user(email, password, first_name, last_name, mobile, 
 **extra_fields)


class User(AbstractBaseUser,PermissionsMixin):
    
    email = models.EmailField(db_index=True, unique=True, max_length=254)
    first_name = models.CharField(max_length=240)
    last_name = models.CharField(max_length=255)
    mobile = models.CharField(max_length=50)
    address = models.CharField( max_length=250)

    is_staff = models.BooleanField(default=True) 
    is_active = models.BooleanField(default=True) 
    is_superuser = models.BooleanField(default=False) 

    objects = CustomUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name','last_name','mobile']

    class Meta:
        verbose_name = 'User'
        verbose_name_plural = 'Users'

如果您已經primary_key設置DEFAULT_AUTO_FIELD 。然后你可以像這樣使用UUIDField

import uuid
from django.db import models
from django.contrib.auth.models import AbstractBaseUser,PermissionsMixin

class User(AbstractBaseUser,PermissionsMixin):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    # other fields

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM