1.BBS需求分析和创建ORM

1. 需要哪些表
1. UserInfo
1. username
2. password
3. avatar
2. 文章表:
title
publish_date
desc
author
详细内容 一对一关联 文章详情表
3. 文章详情表
info
4. 评论表
1. user
2. 时间
3. 内容
4. 关联的文章
5. 是谁的子评论
5. 标签
标签名
和文章 多对多
6. 分类
分类名
和文章的关联关系 多对多/一对多
7. 点赞
是赞还是踩
文章
谁点的 关联user
2.创建ORM
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    """
    用户信息表
    """
    nid = models.AutoField(primary_key=True)
    phone = models.CharField(max_length=11, null=True, unique=True)
    avatar = models.FileField(upload_to="avatars/", default="avatars/default.png", verbose_name="头像")
    create_time = models.DateTimeField(auto_now_add=True)
    blog = models.OneToOneField(to="Blog", to_field="nid", null=True)
    def __str__(self):
        return self.username

    class Meta:
        verbose_name = "用户"
        verbose_name_plural = verbose_name


class Blog(models.Model):
    """
    博客信息
    """
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=64)  # 个人博客标题
    site = models.CharField(max_length=32, unique=True)  # 个人博客后缀
    theme = models.CharField(max_length=32)  # 博客主题

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "blog站点"
        verbose_name_plural = verbose_name


class Category(models.Model):
    """
    个人博客文章分类
    """
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)  # 分类标题
    blog = models.ForeignKey(to="Blog", to_field="nid")  # 外键关联博客,一个博客站点可以有多个分类

    def __str__(self):
        return self.title
    ##后台中用中文显示##
    class Meta:
        verbose_name = "文章分类"
        verbose_name_plural = verbose_name


class Tag(models.Model):
    """
    标签
    """
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)  # 标签名
    blog = models.ForeignKey(to="Blog", to_field="nid")  # 所属博客

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "标签"
        verbose_name_plural = verbose_name


class Article(models.Model):
    """
    文章
    """
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=50, verbose_name="文章标题")  # 文章标题
    desc = models.CharField(max_length=255)  # 文章描述
    create_time = models.DateTimeField()  # 创建时间  --> datetime()

    # 评论数
    comment_count = models.IntegerField(verbose_name="评论数", default=0)
    # 点赞数
    up_count = models.IntegerField(verbose_name="点赞数", default=0)
    # 踩
    down_count = models.IntegerField(verbose_name="踩数", default=0)

    category = models.ForeignKey(to="Category", to_field="nid", null=True)
    user = models.ForeignKey(to="UserInfo", to_field="nid")
    tags = models.ManyToManyField(  # 中介模型
        to="Tag",
        through="Article2Tag",
        through_fields=("article", "tag"),  # 注意顺序!!!
    )

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "文章"
        verbose_name_plural = verbose_name


class ArticleDetail(models.Model):
    """
    文章详情表
    """
    nid = models.AutoField(primary_key=True)
    content = models.TextField()
    article = models.OneToOneField(to="Article", to_field="nid")

    class Meta:
        verbose_name = "文章详情"
        verbose_name_plural = verbose_name


class Article2Tag(models.Model):
    """
    文章和标签的多对多关系表
    """
    nid = models.AutoField(primary_key=True)
    article = models.ForeignKey(to="Article", to_field="nid")
    tag = models.ForeignKey(to="Tag", to_field="nid")

    def __str__(self):
        return "{}-{}".format(self.article.title, self.tag.title)

    class Meta:
        unique_together = (("article", "tag"),)
        verbose_name = "文章-标签"
        verbose_name_plural = verbose_name


class ArticleUpDown(models.Model):
    """
    点赞表
    """
    nid = models.AutoField(primary_key=True)
    user = models.ForeignKey(to="UserInfo", null=True)
    article = models.ForeignKey(to="Article", null=True)
    is_up = models.BooleanField(default=True)

    class Meta:
        unique_together = (("article", "user"),)
        verbose_name = "文章点赞"
        verbose_name_plural = verbose_name


class Comment(models.Model):
    """
    评论表
    """
    nid = models.AutoField(primary_key=True)
    article = models.ForeignKey(to="Article", to_field="nid")
    user = models.ForeignKey(to="UserInfo", to_field="nid")
    content = models.CharField(max_length=255)  # 评论内容
    create_time = models.DateTimeField(auto_now_add=True)
    parent_comment = models.ForeignKey("self", null=True, blank=True)  # blank=True 在django admin里面可以不填

    def __str__(self):
        return self.content

    class Meta:
        verbose_name = "评论"
        verbose_name_plural = verbose_name
models.py

 



转载于:https://www.cnblogs.com/zgf-666/p/9129432.html

当进行Django在线考试系统的需求分析时,我们可以考虑以下功能和特性,并使用Django的ORM来实现数据库模型: 1. 用户注册和登录: - 需求:用户可以注册账号,并使用账号登录系统。 - ORM实现:可以使用Django提供的内置User模型,或者自定义一个用户模型来管理用户的注册和登录。 2. 用户角色管理: - 需求:系统可以区分不同的用户角色,例如学生和教师。 - ORM实现:在用户模型中添加一个角色字段,用于标识用户的角色类型。 3. 考试管理: - 需求:教师可以创建和管理考试,包括设置考试名称、时间限制、总分等。 - ORM实现:创建一个Exam模型,包含属性如考试名称、时间限制、总分等。 4. 问题管理: - 需求:教师可以添加、编辑和删除考试题目,包括问题内容、选项、正确答案等。 - ORM实现:创建一个Question模型,与Exam模型建立一对多的关系,包含属性如问题内容、选项、正确答案等。 5. 考试展示: - 需求:学生可以查看可参与的考试列表,并选择参加考试。 - ORM实现:编写相应的视图函数,查询数据库中的考试信息,并在模板中展示给学生。 6. 考试计时: - 需求:系统需要提供计时功能,限制学生在规定的时间内完成考试。 - ORM实现:可以在Exam模型中添加一个时间限制字段,记录考试的时间限制。 7. 答案提交: - 需求:学生可以选择答案并提交,系统需要保存学生的答案。 - ORM实现:创建一个Answer模型,与Question模型建立一对多的关系,用于存储学生的答案。 8. 成绩统计: - 需求:系统需要计算学生的得分,并记录每次考试的成绩。 - ORM实现:可以编写相应的计算得分的逻辑,并将得分存储在数据库中。 以上是一些常见的需求和ORM实现思路,根据具体需求可以进一步细化和完善数据库模型和业务逻辑。希望对您有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值