Django-ORM模型开发示例

本文详细介绍如何使用Django的ORM进行数据库操作,包括讲师、课程、学生及助教等信息的模型设计,涵盖字段属性、关联关系及元数据的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from django.db import models

class Teacher(models.Model):
    """讲师信息表"""
    nickname=models.CharField(max_length=30,primary_key=True,db_index=True,verbose_name="昵称") #db_index索引
    introduction=models.TextField(default="这个人很懒,没有签名...",verbose_name="简介")
    fans=models.PositiveIntegerField(default="0",verbose_name="粉丝数")
    created_at=models.DateTimeField(auto_now_add=True,verbose_name="创建时间")
    updated_at=models.DateTimeField(auto_now=True,verbose_name="更新时间")
    class Meta:
        verbose_name="讲师信息表"
        verbose_name_plural=verbose_name
    def __str__(self):
        return self.nickname
        
class Course(models.Model):
    """课程信息表"""
    title=models.CharField(max_length=100,primary_key=True,db_index=True,verbose_name="课程名")
    teacher=models.ForeignKey(Teacher,null=True,blank=True,on_delete=models.CASCADE,verbose_name="课程讲师")#删除级联
    type=models.CharField(choices=((1,"实战课"),(2,"免费课"),(0,"其他")),max_length=1,default=0,verbose_name="课程类型") #choices枚举
    price=models.PositiveSmallIntegerField(verbose_name="价格")
    volume=models.BigIntegerField(verbose_name="销量")
    online=models.DateField(verbose_name="上线时间")
    created_at=models.DateTimeField(auto_now_add=True,verbose_name="创建时间")
    updated_at=models.DateTimeField(auto_now=True,verbose_name="更新时间")
    class Meta:
        verbose_name="课程信息表"
        verbose_name_plural=verbose_name
    def __str__(self):
        #return f"{self.get_type_display()}-{self.title}" #示例:实战课-Django入门
        return "{}-{}".format(self.get_type_display(),self.title)

class Student(models.Model):
    """学生信息表"""
    nickname=models.CharField(max_length=30,primary_key=True,db_index=True,verbose_name="昵称")
    course=models.ManyToManyField(Course,verbose_name="课程")
    age=models.PositiveSmallIntegerField(verbose_name="年龄")
    gender=models.CharField(choices=((1,"男"),(2,"女"),(0,"保密")),max_length=1,default=0,verbose_name="性别")
    study_time=models.PositiveIntegerField(default="0",verbose_name="学习时长(h)")
    created_at=models.DateTimeField(auto_now_add=True,verbose_name="创建时间")
    updated_at=models.DateTimeField(auto_now=True,verbose_name="更新时间")
    class Meta:
        verbose_name="学生信息表"
        verbose_name_plural=verbose_name
    def __str__(self):
        return self.nickname

class TeacherAssistant(models.Model):
    """助教信息表"""
    nickname=models.CharField(max_length=30,primary_key=True,db_index=True,verbose_name="昵称")
    teacher=models.OneToOneField(Teacher,null=True,blank=True,on_delete=models.SET_NULL,verbose_name="讲师")
    hobby=models.CharField(max_length=100,null=True,blank=True,verbose_name="爱好")
    created_at=models.DateTimeField(auto_now_add=True,verbose_name="创建时间")
    updated_at=models.DateTimeField(auto_now=True,verbose_name="更新时间")
    class Meta:
        verbose_name="助教信息表"
        db_table="courses_assistant"
        verbose_name_plural=verbose_name
    def __str__(self):
        return self.nickname

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值