前言:本文是学习网易微专业的《python全栈工程师 - Django快速建站》课程的笔记,欢迎学习交流。同时感谢老师们的精彩传授!
Django
中模型的含义和作用HTML
文件中SQL
语句读取数据库,Django
通过ORM
(Object-Relational Mapping
,对象关系映射)来实现对数据库的读写。ORM
:在关系型数据库和业务实体对象之间创建映射关系。操作业务对象时,不需要使用SQL
语句,只需要操作对象的属性和方法。ORM
实现方法:models.py
(也可以是其他文件)django.db.models.Model
appname_modelname
,(都是小写字母)python manage.py makemigrations
python manage.py migrate
在myproject/blog/models.py
文件中写入以下内容
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class BlogArticles(models.Model):
title = models.CharField(max_length=300)
author = models.ForeignKey(User, on_delete=models.CASCADE,related_name='blog_posts')
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
class Meta:
ordering = ('-publish', )
def __str__(self):
return self.title
title = models.CharField(max_length=300)
Field
类的实例,Django
利用这些字段类来实现以下功能:INTEGER
,VARCHAR
,TEXT
)。HTML
视图(如:,
)。Django
后台和自动生成的表单。更多内容请参考文章:Django模型系统的常用字段和字段参数
title = models.CharField(max_length=300)
说明:
1).CharField
:表示字符类型
2).max_length
:数据库存储VARCHAR
数据时的字节最大长度
publish = models.DataTimeField(default=timezone.now)
说明:
1).DateTimeField
:表示日期时间类型
2).default
:默认指定的时间
body = models.TextField()
说明:TextField
表示文本类型
from django.contrib.auth.models import User
class BlogArticles(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
ForeignKey
:外键,一对多(多对一)关系User
:表示被关联的类on_delete=models.CASCADE
:表示联级删除related_name='blog_posts'
:表示User
的实例以blog_posts
属性反向查询到BlogArticles
的实例在项目目录下,即myproject
目录下,运行命令:
# 第一步
python3 manage.py makemigrations
# 第二步
python3 manage.py migrate
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
上面的后台管理界面只显示用户模块的内容,没有显示blog
的内容,进行下面的操作:
./blog/admin.py
文件,写入以下代码from django.contrib import admin
from .models import BlogArticles
admin.site.register(BlogArticles)
保存上面代码,此时后台界面是这样的:
但Blog
部分的内容只显示文章的标题,右边大片空白:
为了在文章列表中显示更多的内容,继续编辑./blog/admin.py
文件,替换为以下代码:
from django.contrib import admin
from .models import BlogArticles
class BlogArticlesAdmin(admin.ModelAdmin):
# 要显示的字段
list_display = ('title', 'author', 'publish')
list_filter = ('publish', 'author')
search_fields = ('title', 'body')
raw_id_fields = ('author',)
date_hierarchy = 'publish'
ordering = ['-publish', 'author']
admin.site.register(BlogArticles, BlogArticlesAdmin)