CyberExam-django/exam/models.py
2024-07-11 15:46:31 +08:00

82 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)