82 lines
3.3 KiB
Python
82 lines
3.3 KiB
Python
import uuid
|
||
|
||
from django.db import models
|
||
from django.contrib.auth.models import BaseUserManager, AbstractUser
|
||
from django.contrib.auth import get_user_model
|
||
|
||
|
||
# Create your models here.
|
||
|
||
class Question(models.Model):
|
||
uid = models.UUIDField(primary_key=True, default=uuid.uuid4, unique=True)
|
||
question_text = models.CharField(max_length=300, unique=True, verbose_name='题目文本')
|
||
pub_date = models.DateTimeField(auto_now=True, verbose_name='发布日期')
|
||
|
||
image = models.ImageField(upload_to='images/question_images/', verbose_name='图片', blank=True, null=True)
|
||
|
||
choice_a = models.CharField(max_length=300)
|
||
choice_b = models.CharField(max_length=300)
|
||
choice_c = models.CharField(max_length=300)
|
||
choice_d = models.CharField(max_length=300)
|
||
|
||
answer = models.CharField(choices=(('A', 'A'), ('B', 'B'), ('C', 'C'), ('D', 'D')), max_length=10)
|
||
|
||
class Meta:
|
||
verbose_name = '问题'
|
||
verbose_name_plural = verbose_name
|
||
|
||
|
||
class UserManager(BaseUserManager): # 自定义Manager管理器
|
||
def _create_user(self, username, password, email, **kwargs):
|
||
if not username:
|
||
raise ValueError("请传入用户名!")
|
||
if not password:
|
||
raise ValueError("请传入密码!")
|
||
if not email:
|
||
raise ValueError("请传入邮箱地址!")
|
||
user = self.model(username=username, email=email, **kwargs)
|
||
user.set_password(password)
|
||
user.save()
|
||
return user
|
||
|
||
def create_user(self, username, password, email, **kwargs): # 创建普通用户
|
||
kwargs['is_superuser'] = False
|
||
return self._create_user(username, password, email, **kwargs)
|
||
|
||
def create_superuser(self, username, password, email, **kwargs): # 创建超级用户
|
||
kwargs['is_superuser'] = True
|
||
kwargs['is_staff'] = True
|
||
return self._create_user(username, password, email, **kwargs)
|
||
|
||
|
||
class CyberUser(AbstractUser): # 自定义User
|
||
uid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||
username = models.CharField(max_length=15, verbose_name="用户名", unique=True)
|
||
nickname = models.CharField(max_length=13, verbose_name="昵称", null=True, blank=True)
|
||
email = models.EmailField(verbose_name="邮箱", null=True, blank=True)
|
||
picture = models.ImageField(upload_to="images/avatars", verbose_name="用户头像", null=True, blank=True)
|
||
date_joined = models.DateTimeField(auto_now_add=True)
|
||
score = models.IntegerField(default=0)
|
||
|
||
USERNAME_FIELD = 'username' # 使用authenticate验证时使用的验证字段,可以换成其他字段,但验证字段必须是唯一的,即设置了unique=True
|
||
REQUIRED_FIELDS = ['email'] # 创建用户时必须填写的字段,除了该列表里的字段还包括password字段以及USERNAME_FIELD中的字段
|
||
EMAIL_FIELD = 'email' # 发送邮件时使用的字段
|
||
|
||
objects = UserManager()
|
||
|
||
def get_full_name(self):
|
||
return self.username
|
||
|
||
def get_short_name(self):
|
||
return self.username
|
||
|
||
class Meta:
|
||
verbose_name = "用户"
|
||
verbose_name_plural = verbose_name
|
||
|
||
|
||
class Choice(models.Model):
|
||
choice = models.CharField(choices=(('A', 'A'), ('B', 'B'), ('C', 'C'), ('D', 'D')), max_length=10)
|
||
question = models.ForeignKey(Question, on_delete=models.DO_NOTHING)
|
||
user = models.ForeignKey(get_user_model(), on_delete=models.DO_NOTHING)
|