We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Life is a test and this world a place of trial.
Django Blog
Django Tips
models.py
app
project
Django
django.db.models.Model
Model
title = models.CharField(max_length=150)
CharField
varchar
多对多关系
ManyToManyField
一对多关系
多对一
ForeignKey
from django.db import models class Classes(models.Model): cls_num = models.CharField(max_length=30) class Student(models.Model): name = models.CharField(max_length=100) # 一对多的关系,一个班级多个学生,ForeignKey cls_num = models.ForeignKey(Classes) class Course(models.Model): # 多对多的关系,每个学生可以有多个课程,一个课程也可以多个学生 c_num = models.ManyToManyField(Student)
settings.py
INSTALLED_APPS
逗号
2
makemigrations
migrate
python manage.py makemigrations
migrations
python manage.py migrate
id
_id
objects
Post.objects.all()
posts
QuerySet
Post.objects.filter(xxx='aaa')
filter()
filter(xxx='aaa')
SQL
=
__
Post.objects.filter(xxx__contains='aaa')
contains
LIKE
icontains
startwith
endwith
range
Post.objects.get(xxx='aaa')
get()
Post.objects.order_by('xxx')
order_by()
all()
逆向排序
-
多个字段排序
class Meta:
Meta
class Post(models.Model): # ... class Meta: ordering = ('-aaa',) # 注意元组元素后面的逗号
Post.objects.filter(xxx='aaa').order_by('yyy')
Python
Post.objects.order_by('xxx')[0]
Post.objects.order_by('xxx')[0:2]
Post.objects.order_by('-xxx')[0]
save()
update()
Post.objects.all().update(xxx='bbb')
delete()
Post.objects.all().delete()
django.contrib
django.contrib.auth
django.contrib.sessions
django.contrib.comments
django.contrib.admin
python manage.py createsuperuser
python manage.py changepassword username
username
The text was updated successfully, but these errors were encountered:
No branches or pull requests
0x01 Django
Django Blog
学习总结Django Tips
models.py
数据模型app
中,也就是说如果牵扯到了数据库,那么一般情况都会创建app
,一个project
可以包含多个app
,技术上,project
的作用是提供配置文件(定义数据库信息,app
列表等),一个app
就是一套Django
功能的集合,通常包括模型和视图,app
很容易移植到其他project
和被多个project
复用django.db.models.Model
的子类,它的父类Model
包含了所有必要的和数据库交互的方法,并提供了一个简洁的定义数据库字段的语法title = models.CharField(max_length=150)
其中CharField
相当于varchar
多对多关系
: 会自动创建一个关联表,ManyToManyField
一对多关系
(反过来就是多对一
):ForeignKey
app
需要在settings.py
文件中加载,写在INSTALLED_APPS
中,不要忘记Django
中元组元素后面的逗号
models.py
编辑完后,此时数据模型没有同步到数据中,同步数据库需要2
个步骤makemigrations
和migrate
命令python manage.py makemigrations
migrations
文件夹内python manage.py migrate
app
名称和模型的小写名称的组合,Django
会为每个表格自动添加一个id
主键,可以重新设置它,Django
也会添加_id
后缀到外键字段名,通用这个也可以自定义objects
属性,也被称为objects
管理器,每个管理器管理着所有针对数据包含、还有最重要的数据查询的表格级操作,查找数据的时候就会使用到objects
Post.objects.all()
查询数据库中所有posts
对象,虽然这个对象看起来像列表,但是它实际上是一个QuerySet
(查询集)对象,这个对象是数据库中一些记录的集合Post.objects.filter(xxx='aaa')
利用filter()
方法可以对数据进行过滤,可以同时传递多个参数到filter()
来缩小选取范围filter(xxx='aaa')
是精确匹配,SQL
缺省的=
操作符是精确匹配(缺省就是默认的意思)__
双下划线来连接一些特定的匹配Post.objects.filter(xxx__contains='aaa')
:contains
就是LIKE
icontains
(大小写无关的LIKE
)、startwith
、endwith
、range
Post.objects.get(xxx='aaa')
上面的filter()
获得的是一个查询集,查询集就是一个QuerySet
,这里的get()
获取的就是单个对象,而不是QuerySet
,如果返回的结果是多个对象或者没找到都会抛出异常Post.objects.order_by('xxx')
利用order_by()
来对检索结果排序,不同于all()
的是这个是有排序的检索逆向排序
的话,在前面加一个减号-
前缀多个字段排序
的话,使用多个参数就可以了,先按第一个字段排序,第一个字段相同的情况下,按第二个字段排序Django
可以指定缺省排序方式,即不用每次使用order_by()
来进行排序(字母顺序排序),利用class Meta:
,也就是Meta
类,可以在任意一个数据模型类中使用Meta
类,除非检索时指定了使用order_by()
,否则都用Meta
类指定的排序Post.objects.filter(xxx='aaa').order_by('yyy')
Python
的列表裁剪语法,可以限制返回的数据:Post.objects.order_by('xxx')[0]
Post.objects.order_by('xxx')[0:2]
Python
的负索引,但是可以用倒排序来实现Post.objects.order_by('-xxx')[0]
save()
方法会默认更新这个一行中的所有列(即其他列不变),但是有些情况下,只需要更新指定的列,其他的不更新,这个时候使用update()
方法Post.objects.all().update(xxx='bbb')
update()
方法会返回一个整型数值,表示受影响的数据条数delete()
方法all()
:Post.objects.all().delete()
filter()
或者get()
django.contrib
包django.contrib
是一套庞大的功能集,它是Django
基本代码的组成部分,其中又有以下主要的几部分django.contrib.auth
: 用户鉴别系统django.contrib.sessions
: 支持匿名会话django.contrib.comments
: 用户评论系统django.contrib.admin
: 管理系统Django
有一个简单的管理后台系统,激活它之前需要同步数据库才可以(如果之前一次都没有同步过的话)python manage.py createsuperuser
创建超级用于python manage.py changepassword username
来修改username
的密码The text was updated successfully, but these errors were encountered: