最全得django讲解,零基础从入门到精通(No2模型)[Python基础]

python

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于腾讯云 作者:Python进阶者

( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 )

django从入门到精通No.2----模型

一、前言

学过orm系统自然之道模型的重要性,很多web站点都需要与数据库交互,这个时候模型的设计就显得尤为重要,一个好的模型会使得项目方便管理并且易于维护,比如我们学过的flask,里面的sqlalchemy就是这样一个优秀的模块,通过它可以快速和数据库建立通道,从而使得web编程更为高效,本文主要讲解django的模型。

二、模型的定义

模型可以定义储存数据的字段和值,比如我们在进行表单提交的时候,一些注册信息就可以利用模型来进行管理,然后统一提交到数据库中。简单来说,模型是与数据库有关的操作集合。

三、模型的字段和约束

这里我们需要在he文件夹中找到models.py文件,然后我们试着改动一下这个文件的内容,如下:

from django.db import models

# Create your models here.

class book(models.Model):

book_name=models.CharField(max_length=30)

book_price=models.IntegerField()

用于制作模型的每个类都必须继承models.Model类,然后我们会使用字段来对数据进行记录,django中有很多字段,如下:

四、关联关系

django提供了三种数据库关联关系,即多对一,一对一,多对多,废话不多说,就是干。

1.多对一

因为是关联关系,所以我们必须指定两个类来进行相互操作,这里涉及到一个外键的操作,即ForeignKey字段,而且外键要定义在多的一方。我们先来创建两个类,如下:

from django.db import models

# Create your models here.

class book(models.Model):

id=models.AutoField(primary_key=True)

book_name=models.CharField(max_length=30)

book_price=models.IntegerField()

class people(models.Model):

article=models.CharField(max_length=20)

age=models.IntegerField()

bk=models.ForeignKey(book,on_delete=models.CASCADE)

ForeignKey提供了多个参数,如下

ForeignKey()

to # 要进行关联的表名

to_field=None # 要关联的表中的字段名称

on_delete=None # 当删除关联表中的数据时,当前表与其关联的行的行为

- models.CASCADE,删除关联数据,与之关联也删除

- models.DO_NOTHING,删除关联数据,引发错误IntegrityError

- models.PROTECT,删除关联数据,引发错误ProtectedError

- models.SET_NULL 删除关联数据,与之关联的值设为null(前提FK字段需要设为可空)

- models.SET_DEFAULT 删除关联数据,与之关联的值设为默认值(前提FK字段设置默认值)

- models.SET,删除关联数据,

1. 与之关联的值设置为指定值,设置:models.SET(值)

2. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

related_name=None # 反向操作时,使用的字段名,用于代替表名_set

related_query_name=None,# 反向操作时,使用的连接前缀,用于替换【表名】

limit_choices_to=None, # 在Admin或ModelForm中显示关联数据时,提供的条件,字典类型

db_constraint=True # 是否在数据库中创建外键约束

parent_link=False # 在Admin中是否显示关联数据

2.多对多

多对多的表,必须设中间关联表,关联表设独立主键,并引入两个“多”头的表的主键作为关联表的外键。如下:

from django.db import models

# Create your models here.

class book(models.Model):

id=models.AutoField(primary_key=True)

book_name=models.CharField(max_length=30)

book_price=models.IntegerField()

class people(models.Model):

article=models.CharField(max_length=20)

age=models.IntegerField()

bk=models.ForeignKey(book,on_delete=models.CASCADE)

class title(models.Model):

start=models.DateTimeField(default=timezone.now)

end=models.DateTimeField(auto_now=True)

p=models.ManyToManyField(book)

如果你想知道更多成员关系的细节,你可以指定一个中介模型来定义多对多关系,可以将其它字段放在中介模型中,源模型的字段使用through参数指向中介模型。如下:

from django.db import models

from django.utils import timezone

# Create your models here.

class book(models.Model):

id=models.AutoField(primary_key=True)

book_name=models.CharField(max_length=30)

book_price=models.IntegerField()

class people(models.Model):

article=models.CharField(max_length=20)

age=models.IntegerField()

class title(models.Model):

start=models.DateTimeField(default=timezone.now)

end=models.DateTimeField(auto_now=True)

p=models.ManyToManyField(people,through="zj")

class zj(models.Model):

bk=models.ForeignKey(book,on_delete=models.CASCADE)

p=models.ForeignKey(people,on_delete=models.CASCADE)

dt=models.Datefield()

所有参数如下:

ManyToManyField()

to # 要进行关联的表名

related_name=None # 反向操作时,使用的字段名,用于代替表名_set

related_query_name=None # 反向操作时,使用的连接前缀,用于替换表名

limit_choices_to=None # 在Admin或ModelForm中显示关联数据时,提供的条件,字典类型

symmetrical=None # 仅用于多对多自关联时,用于指定内部是否创建反向操作的字段,boolean类型

through=None # 自定义第三张表时,使用字段用于指定关系表

through_fields=None # 自定义第三张表时,使用字段用于指定关系表中那些字段做多对多关系表

db_constraint=True # 是否在数据库中创建外键约束

db_table=None # 默认创建第三张表时,数据库中表的名称

3.一对一

一对一其实就是 一对多 + 唯一索引,当两个类之间有继承关系时,默认会创建一个一对一字段,一对一使用OneToOneField来实现,如下:

from django.db import models

# Create your models here.

class book(models.Model):

id=models.AutoField(primary_key=True)

book_name=models.CharField(max_length=30)

book_price=models.IntegerField()

class people(models.Model):

article=models.CharField(max_length=20)

age=models.IntegerField()

b=models.OneToOneField(book)

它里面的参数如下:

OneToOneField()

to # 要进行关联的表名

to_field=None # 要关联的表中的字段名称

on_delete=None # 当删除关联表中的数据时,当前表与其关联的行的行为

五、管理员登陆
为了能让大家提前看到django的数据操作,django内置了一款非常到位的系统管理员登陆设计系统,首先我们创建下用户,如下:

python manage.py createsuperuser

然后我们按照要求一步步设置参数,如图:

然后我们启动服务器并且进入到下图这个页面中去,如图:

以上是 最全得django讲解,零基础从入门到精通(No2模型)[Python基础] 的全部内容, 来源链接: utcz.com/z/530866.html

回到顶部