Django之orm操作数据库(一对多)

models.py 中的内容

from django.db import models
import datetime
from django.utils import timezone


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

Python Console中的查询操作:

from polls.models import Choice, Question
from datetime import date
q = Question()
q.pub_date(date(2000,1,1))

q.pub_date = date(2001,1,1)
q.question_text = '我是问题5'
q.save()

q.pub_date
datetime.date(2001, 1, 1)
Question.objects.all()
<QuerySet [<Question: 问题1>, <Question: 问题2>, <Question: 问题三>, <Question: 我是第四个问题>, <Question: 我是问题5>]>
c = Choice()
c.question = q # 用外键属性关联上面生成的Question对象
c.choice_text = '我是答案6'
c.votes = 3
c.save()
c.votes
3
Choice.objects.all()
<QuerySet [<Choice: 答案1>, <Choice: 答案2>, <Choice: 答案3>, <Choice: 我是选项1>, <Choice: 我是答案6>]>
# 用多表查询一表
Choice.objects.get(pk = 5)
<Choice: 我是答案6>
Choice.objects.get(pk = 5).question
<Question: 我是问题5>
Choice.objects.get(pk = 5).question.pub_date
datetime.datetime(2000, 12, 31, 16, 0, tzinfo=<UTC>)
# 从一查询多
q.choice_set.all()
<QuerySet [<Choice: 我是答案6>]>

数据库中对应的表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当进行Django在线考试系统的需求分析时,我们可以考虑以下功能和特性,并使用DjangoORM来设计数据库模型: 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
发出的红包

打赏作者

EasternTiger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值