Django创建模型

1、根据创建好应用模块

python 复制代码
python manage.py startapp tests

2、在models文件里创建模型

python 复制代码
from django.db import models

from book.models import User


# Create your models here.
class Tests(models.Model):
    STATUS_CHOICES = (
        (0, '启用'),
        (1, '停用'),
        # 更多状态...
    )
    add_time = models.DateTimeField(auto_now_add=True, verbose_name='添加时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='更改时间')
    status = models.BooleanField(choices=STATUS_CHOICES, default=0, verbose_name='状态')
    name = models.CharField(max_length=100, verbose_name='标题')
    content = models.TextField(verbose_name='内容')
    # 会自动创建author_id字段 这是处于同一个app模块下面 null=True 允许为空
    # 一对多的关联
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, verbose_name='作者')

    # def __str__(self):
    #     return self.name  # 自定义MainModel对象的字符串表示形式

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

    # CASCADE: 当主表中的记录被删除时,从表中所有引用该主键的记录也会被自动删除。这是级联删除的概念,确保了数据库的完整性,避免了悬挂的外键
    # PROTECT: 当从表中存在依赖于主表的记录时,禁止删除主表中的相关记录。这可以防止意外删除会导致从表中出现悬挂外键的情况。
    # SET_NULL: 当主表中的记录被删除时,将从表中所有引用该主键的外键字段设置为NULL。但是,这要求外键字段允许NULL值。
    # SET_DEFAULT: 将外键字段设置为其默认值。这同样要求字段定义了默认值。
    # DO_NOTHING: 不采取任何行动,如果从表中有记录引用了要删除的主键,则会抛出一个完整性错误。

    #
    # 如果不是则需要加上app名称.模型
    # author = models.ForeignKey('home.User', on_delete=models.CASCADE)

    # 如果外键则是自身的话,self或者本身 Article
    # author = models.ForeignKey('self', on_delete=models.CASCADE,null=True)

    def to_dict(self):
        return {
            "id": self.id,
            "name": self.name,
            "content": self.content,
            "author": self.author.name,
            "author_id": self.author.id,
        }

3、将创建好的模型结构,生成表

python 复制代码
#运行所有的
python manage.py makemigrations
python manage.py migrate


#运行应用模块
python manage.py makemigrations tests
python manage.py migrate tests

如果报这个错了,那就意味着需要在配置文件里注册你的应用模块

再次运行该命令,则会在迁移目录下生成文件

运行命令,将迁移文件,生成表

python 复制代码
python manage.py migrate tests
相关推荐
嘵奇6 分钟前
Spring Boot拦截器详解:原理、实现与应用场景
java·spring boot·后端
Code_流苏11 分钟前
《Python星球日记》 第71天:命名实体识别(NER)与关系抽取
python·深度学习·ner·预训练语言模型·关系抽取·统计机器学习·标注方式
点云SLAM11 分钟前
Python中列表(list)知识详解(2)和注意事项以及应用示例
开发语言·人工智能·python·python学习·数据结果·list数据结果
国强_dev11 分钟前
任意复杂度的 JSON 数据转换为多个结构化的 Pandas DataFrame 表格
开发语言·python
伊织code35 分钟前
PyTorch API 7 - TorchScript、hub、矩阵、打包、profile
人工智能·pytorch·python·ai·矩阵·api
开开心心就好44 分钟前
高效全能PDF工具,支持OCR识别
java·前端·python·pdf·ocr·maven·jetty
秋野酱2 小时前
基于javaweb的SpringBoot自习室预约系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
程序员三藏2 小时前
软件测试之功能测试详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
辰%2 小时前
如何重启pycharm中的项目?
windows·python·pycharm
weloveut2 小时前
西门子WinCC Unified PC的GraphQL使用手册
后端·python·graphql