Django模型

Django模型

Django模型是Django用来创建表、其字段和各种约束的内置功能。简而言之,Django模型就是人们使用Django的数据库的SQLSQL(结构化查询语言)很复杂,在创建、删除、更新或任何其他与数据库有关的东西时,涉及到很多不同的查询。Django模型简化了这些任务,并将表组织到模型中。一般来说,每个模型映射到一个数据库表。
这篇文章围绕着如何使用Django模型来方便地在数据库中存储数据。此外,我们可以使用Django的管理面板来创建、更新、删除或检索模型的字段以及各种类似操作。Django模型提供了简单性、一致性、版本控制和高级元数据处理。模型的基本原理包括

  • 每个模型都是一个Python类,其子类为django.db.models.Model。

  • 模型的每个属性代表一个数据库字段。

  • 有了这些,Django给你提供了一个自动生成的数据库访问API;见《制作查询》。

示例 –

from django.db import models
 
# Create your models here.
class GeeksModel(models.Model):
    title = models.CharField(max_length = 200)
    description = models.TextField()

Django将Django模型中定义的字段映射为数据库的表字段,如下图所示。

Django模型

使用Django模型

要使用Django模型,需要有一个项目和一个应用程序在其中工作。当你启动一个应用程序后,你可以在app/models.py中创建模型。在开始使用模型之前,让我们看看如何启动一个项目并创建一个名为geeks.py的应用程序。

创建一个模型

语法

from django.db import models

class ModelName(models.Model):
        field_name = models.Field(**options)

要创建一个模型,在geeks/models.py中输入代码。

# import the standard Django Model
# from built-in library
from django.db import models
 
# declare a new model with a name "GeeksModel"
class GeeksModel(models.Model):
        # fields of the model
    title = models.CharField(max_length = 200)
    description = models.TextField()
    last_modified = models.DateTimeField(auto_now_add = True)
    img = models.ImageField(upload_to = "images/")
 
        # renames the instances of the model
        # with their title name
    def __str__(self):
        return self.title

每当我们创建一个模型,删除一个模型,或者在我们项目的任何models.py中更新任何东西。makemigrations基本上为预装的应用(可以在settings.py中的install apps中查看)和你新创建的应用的模型(你在install apps中添加的)生成SQL命令,而migrate则在数据库文件中执行这些SQL命令。
因此,当我们运行时。

Python manage.py makemigrations

创建上述模型的SQL查询,作为一个表被创建,并且

 Python manage.py migrate

在数据库中创建表。
现在我们已经创建了一个模型,我们可以执行各种操作,比如为表创建一个行,或者就Django而言,创建一个模型的实例。要了解更多信息,请访问 – Django基本应用模型 – Makemigrations和Migrate

在Django管理界面渲染一个模型

要在Django admin中渲染一个模型,我们需要修改app/admin.py。进入geeks应用中的admin.py,输入以下代码。从models.py中导入相应的模型,并将其注册到管理界面中。

from django.contrib import admin
   
# Register your models here.
from .models import GeeksModel
   
admin.site.register(GeeksModel)

现在我们可以在Django Admin中检查模型是否已经被渲染。Django管理界面可用于图形化地实现CRUD(创建、检索、更新、删除)。

Django模型

要查看更多关于在Django管理中渲染模型的信息,请访问 – Django管理界面的渲染模型

Django CRUD – 插入、更新和删除数据

Django让我们与它的数据库模型进行交互,即添加、删除、修改和查询对象,使用一个叫做ORM(Object Relational Mapper)的数据库抽象API。我们可以通过在我们的项目目录下运行以下命令来访问Django ORM。

python manage.py shell

添加对象
为了创建一个模型Album的对象并将其保存到数据库中,我们需要编写以下命令。

>>>> a = GeeksModel(

         title = "GeeksForGeeks",  

         description = "A description here",

         img = "geeks/abc.png"

         )

>>> a.save()

Retrieving objects
为了检索一个模型的所有对象,我们编写以下命令。

>>> GeeksModel.objects.all()
<QuerySet [<GeeksModel: Divide>, <GeeksModel: Abbey Road>, <GeeksModel: Revolver>]>

修改现有对象
我们可以按以下方式修改现有对象。

>>> a = GeeksModel.objects.get(id = 3)
>>> a.title = "Pop"
>>> a.save()

Deleting objects
要删除一个对象,我们需要编写以下命令。

>>> a = Album.objects.get(id = 2)
>>> a.delete()

查看Django的ORM(对象)的详细帖子,请访问Django ORM – 插入、更新和删除数据。

对模型中的字段进行验证

Django模型中的内置字段验证是所有Django字段预定义的默认验证。每个字段都有来自Django验证器的内置验证。例如,IntegerField内置验证,它只能存储整数值,而且是在一个特定范围内。
在geeks应用程序的models.py文件中输入以下代码。

from django.db import models
from django.db.models import Model
# Create your models here.
 
class GeeksModel(Model):
    geeks_field = models.IntegerField()
 
    def __str__(self):
        return self.geeks_field

在Django上运行了makemigrations和migrate并渲染了上述模型后,让我们尝试用字符串 “GfG is Best “创建一个实例。

Django模型

你可以在管理界面看到,人们不能在IntegerField中输入字符串。同样的,每个字段都有自己的验证方法。

基本模型数据类型和字段列表

模型最重要的部分和唯一需要的部分是它定义的数据库字段列表。字段是由类属性指定的。下面是Django中使用的所有字段类型的列表。

字段名称 描述
AutoField 它是一个自动递增的IntegerField。
BigAutoField 它是一个64位的整数,和AutoField很像,只是它能保证适合从1到9223372036854775807的数字。
BigIntegerField 它是一个64位的整数,和IntegerField很像,只是它能保证适合从-9223372036854775808到9223372036854775807的数字。
BinaryField 一个用于存储原始二进制数据的字段。
BooleanField 一个真/假字段。这个字段的默认窗体部件是一个CheckboxInput。
CharField 它是为小到大的输入而设置的字符串。
DateField 一个日期,在Python中用一个datetime.date实例表示。它用于日期和时间,在Python中用一个datetime.datetime实例表示。
DecimalField 它是一个固定精度的十进制数,在Python中用一个Decimal实例表示。
DurationField 一个用于存储时间段的字段。
EmailField 这是一个CharField,用于检查值是否为有效的电子邮件地址。
FileField 这是一个文件上传字段。
FloatField 它是一个浮点数,在Python中由一个float实例表示。
ImageField 它继承了FileField的所有属性和方法,但也验证了上传对象是有效的图像。
IntegerField 它是一个整数字段。从-2147483648到2147483647的值在Django支持的所有数据库中都是安全的。
GenericIPAddressField 一个IPv4或IPv6地址,字符串格式(如192.0.2.30或2a02:42fe::4)。
NullBooleanField 类似于BooleanField,但允许NULL作为选项之一。
PositiveIntegerField 和IntegerField一样,但必须是正数或零(0)。
PositiveSmallIntegerField 类似于PositiveIntegerField,但只允许在某个(与数据库有关的)点下取值。
SlugField Slug是一个报纸术语。蛞蝓是某种事物的简短标签,只包含字母、数字、下划线或连字符。它们通常用于URLs中。
SmallIntegerField 它就像IntegerField,但只允许在某个(与数据库有关的)点以下的值。
TextField 一个大的文本字段。这个字段的默认窗体部件是一个文本区域。
TimeField 一个时间,在Python中用一个datetime.time实例表示。
URLField 一个URL的CharField,由URLValidator验证。
UUIDField 一个用于存储通用唯一标识符的字段。使用 Python 的 UUID 类。当在PostgreSQL上使用时,它以uuid数据类型存储,否则以char(32)存储。

关系字段

Django还定义了一组代表关系的字段。

字段名称 描述
ForeignKey 一个多对一的关系。需要两个位置参数:模型所涉及的类和on_delete选项。
ManyToManyField 一个多对多的关系。需要一个位置参数:模型与之相关的类,其作用与对ForeignKey的作用完全相同,包括递归和懒惰关系。
OneToOneField 一个一对一的关系。从概念上讲,这类似于unique=True的ForeignKey,但关系的 “反面 “将直接返回单个对象。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程