首页 > 其他分享 >Django4全栈进阶之路3 Model模型

Django4全栈进阶之路3 Model模型

时间:2023-04-23 17:59:26浏览次数:44  
标签:报修 verbose 进阶 Django4 模型 定义 models 全栈 name

在 Django 中,模型(Model)是用于定义数据结构的组件,其作用如下:

  1. 定义数据结构:模型用于定义数据库中的表格和表格中的字段(列),其中每个模型类对应一个表格,模型中的每个字段对应表格中的一列。模型的定义可以在 models.py 文件中完成。

  2. 数据库操作:模型提供了简单易用的 API 用于操作数据库,包括创建、读取、更新和删除数据等。通过模型可以直接在数据库中执行 CRUD 操作,无需手动编写 SQL 语句。

  3. 数据验证:Django 中的模型还提供了强大的数据验证功能,可以在保存数据之前验证数据的完整性和有效性,确保数据的正确性。

  4. ORM 框架:Django 的模型是基于 ORM(对象关系映射)框架实现的,可以轻松地在不同的数据库之间切换,同时也提供了方便的数据访问和查询功能,避免了直接编写 SQL 语句带来的繁琐和错误。

总的来说,模型是 Django 应用程序中最重要的组件之一,它负责定义数据结构、操作数据库、数据验证和 ORM 框架等方面的功能。通过模型的定义和使用,可以更加方便地管理应用程序中的数据,并且可以保证数据的正确性和安全性。

实例:

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

class Repair(models.Model):
    # 报修单号,使用自增长的主键作为唯一标识
    id = models.AutoField(primary_key=True,verbose_name="报修编号")
    # 报修时间,使用默认值为当前时间
    date = models.DateTimeField(default=timezone.now,verbose_name="报修时间")
    # 报修人姓名,最大长度为50个字符
    name = models.CharField(max_length=50)
    # 报修人电话,最大长度为20个字符
    phone = models.CharField(max_length=20)
    # 报修内容,最大长度为200个字符
    content = models.CharField(max_length=200)
    # 报修状态,使用choices定义状态的可选值
    STATUS_CHOICES = [
        ('pending', '待处理'),
        ('processing', '处理中'),
        ('completed', '已完成'),
        ('canceled', '已取消')
    ]
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending')
    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 = "报修单"
        # 按照报修时间倒序排列
        ordering = ['-date']

    def __str__(self):
        # 返回报修单号和报修人姓名
        return f"{self.id} ({self.name})"

    def cancel(self):
        # 取消报修单
        self.status = 'canceled'
        self.save()

 

上述代码定义了一个名为 Repair 的模型,其中包含了报修单号、报修时间、报修人姓名、报修人电话、报修内容和报修状态等字段。该模型的属性和方法说明如下:

  • id:使用 AutoField 定义主键字段,作为唯一标识符。Django 4 中的模型(Model)类默认会自动为每个模型添加一个自增的整数类型主键字段,不需要显式地在模型中定义 id 字段。
  • date:使用 DateTimeField 定义报修时间字段,使用 timezone.now 设置默认值为当前时间。
  • name:使用 CharField 定义报修人姓名字段,设置最大长度为 50 个字符。
  • phone:使用 CharField 定义报修人电话字段,设置最大长度为 20 个字符。
  • content:使用 CharField 定义报修内容字段,设置最大长度为 200 个字符。
  • status:使用 CharField 定义报修状态字段,使用 choices 定义状态的可选值,设置默认值为 pending
  • Meta:使用 Meta 类设置模型的元数据,包括排序方式等。在这里,我们将报修单按照报修时间的倒序排列。
  • __str__ 方法:使用 __str__ 方法返回报修单的字符串表示,方便在 Django 后台管理界面中查看。
  • cancel 方法:定义一个 cancel 方法,用于取消报修单,将状态设置为 canceled 并保存到数据库中。
  • 使用了 verbose_name 和 verbose_name_plural 选项来分别设置模型的名称和复数形式。同时,我们也将所有字段的 verbose_name 设置为相应的汉字名称,以便在 Django 后台管理界面中更清晰地展示信息。
  • 同时,我们增加了创建时间和更新时间字段,用于记录每条记录的创建时间和最后更新时间。created_at 字段使用了 auto_now_add=True 参数,表示在创建记录时自动设置为当前时间。updated_at 字段使用了 auto_now=True 参数,表示每次保存记录时都会自动更新为当前时间。

以上是一个简单的报修表的模型定义,可以作为 Django 模型的一个示例来参考。需要注意的是,这只是一个示例,实际项目中

标签:报修,verbose,进阶,Django4,模型,定义,models,全栈,name
From: https://www.cnblogs.com/beichengshiqiao/p/17347270.html

相关文章

  • 全栈声明式可观测:KubeVela 的云原生应用洞察体系
    随着云原生技术的日趋成熟,越来越多的工作负载都迁移到Kubernetes之上,包括各类无状态微服务和复杂的有状态应用。为了支撑这些应用所需的各项基础设施,开发者不得不面对大量的底层API。这就形成了两个挑战,一方面是难以标准化,各种工作负载自身都会形成自己的运维管理平台,带来了企......
  • Django全栈进阶之路3 Django4项目APP
    Django4项目APPdjango-adminstartappapp01或pythonmanage.pystartappapp01 #app01是app名称    PyCharm的样子:  ......
  • Mysql查询语句进阶知识集锦
    前言上次咱们简单的学习了一下select的用法,一篇文章教会你进行Mysql数据库和数据表的基本操作,对数据库大概有了一些基本的了解。咱们接着上次继续来看叭!查询数据如下or查询我们在上学时,会听到这样的话,某某某,你把谁谁谁或者谁谁谁叫过来。这样子的话,我们我们要查询的,就是一个或......
  • Django全栈进阶之路1 Django4下载与安装
    python下载安装:下载网址:https://www.python.org/downloads/ 安装方法:https://www.cnblogs.com/beichengshiqiao/p/16153586.html新版的python一般无需配置环境,在安装的时候勾选带有AddPython3.10toPATH的选项即可,如果需要手动配置的,参考:https://www.cnblogs.com/beicheng......
  • Openharmony应用NAPI详解--进阶篇1
    NAPI面向C++的异步接口3.C++实现NAPI异步接口需要做到三步同步返回结果给js/ets调用者另起线程完成异步操作通过回调(callback)或Promise将异步操作结果返回4.异步接口//foundation/filemanagement/dfs_service/frameworks/js/napi/src/sendfile_napi.cpp...DECLARE......
  • Openharmony应用NAPI详解--进阶篇2
    NAPI面向C++的异步接口(promise)promise方式的处理方式承接上文,与callback方式不同的是,promise对象由C++侧创建以返回值的方式传递回js/ets侧,promise对象存储异步执行的结果。//foundation/filemanagement/file_api/interfaces/kits/js/src/common/napi/n_async/n_async_work_p......
  • Openharmony的编译构建--进阶篇1
    上一篇中说明了OpenharmonyV3.1的编译构建流程,如何在标准系统即L2设备添加一个模块呢,在Openharmony上如何编译与运行HelloWorld此篇中有所提及,此篇对此进行详细的说明。一、标准系统添加一个模块在Openharmony中添加模块可以分以下三种情况,对原有的配置文件时行不同程度的修改......
  • Openharmony的编译构建--进阶篇2
    承接上一篇Openharmony的编译构建--进阶篇1中说明了在OpenharmonyV3.1的如何在标准系统即L2设备一个模块的两种情况,此篇对第三种情况进行说明。四、新建子系统并在该子系统的部件下添加模块1.在模块目录下配置BUILD.gn,根据类型选择对应的模板2.新建包含该模块所属部件的bundle......
  • c# 异步进阶———— paralel [二]
    前言简单整理一下paralel,以上是并行的意思。正文我们在工作中常常使用taskawait和async,也就是将线程池进行了封装,那么还有一些更高级的应用。是对task的封装,那么来看下paralel。staticvoidMain(string[]args){ varints=Enumerable.Range(1,100); varresult=Pa......
  • 29、Pipeline Job进阶之部署应用至Kubernetes集群
    PipelineJob进阶之部署应用至Kubernetes集群在jenkins上的k8s云节点,在原来maven-and-docker模板的基础之上,添加容器也可以添加pod模板,通过继承的方式来实现maven-docker-kubectl方式来定义添加podtemplate添加容器:使用kubesphere/kubectl:latest镜像安装插件用于认证到k8s集群之......