Django项目之模型
- 创建环境
- 配置连接MySQL数据库
- 创建表单
- 注册模型
- Django模型类查询
- 模型类的条件查询
- 聚合函数
创建环境
创建Django项目,创建usersapp,并在setting.py中注册
- 项目工作目录
配置连接MySQL数据库
- 修改/Djweb/Djweb/setting.py中DATABASE设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Djweb',
'USER': 'root',
'PASSWORD': 'root',
'HOST': 'localhost',
'PORT': 3306
}
}
并创建数据库
create database Djweb charset=utf8;
安装MySQL数据库依赖
>>pip install mysqlclient
Collecting mysqlclient
Downloading mysqlclient-2.2.0-cp310-cp310-win_amd64.whl (199 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.9/199.9 kB 168.6 kB/s eta 0:00:00
Installing collected packages: mysqlclient
Successfully installed mysqlclient-2.2.0
创建表单
/Djweb/news/models.py
from django.db import models
# Create your models here.
"""
新闻类型表:
news_type表:
id:主键
name:类型名称
新闻信息表:
news_info表:
id:主键
title:标题
content:内容
read:阅读数据
comment:评论数量
数据表之间的关系:
一对一:OneToOneField、一对一,将字段定义在任意一端中
一对多:ForeignKey、一对多,将字段定义在多的一端中
多对多:ManyToManyField、多对多,将字段定义在任意一端中。
"""
class NewsType(models.Model):
name = models.CharField(max_length=30, verbose_name='新闻类型', help_text='名称')
class NewsInfo(models.Model):
title = models.CharField(max_length=100, verbose_name='标题', help_text='标题')
content = models.TextField(max_length=100, verbose_name='内容', help_text='内容')
read = models.IntegerField(verbose_name='阅读量', help_text='阅读量')
comment = models.IntegerField(verbose_name='评论量', help_text='评论量')
type = models.ManyToManyField('NewsType', verbose_name='新闻类型', help_text='新闻类型')
进行迁移
python manage.py makemigrations
Migrations for 'news':
news\migrations\0001_initial.py
- Create model NewsType
- Create model NewsInfo
生成到数据库表单
python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, news, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying news.0001_initial... OK
Applying sessions.0001_initial... OK
此时数据库显示
- 自定义显示数据库表名
/Djweb/news/models.py
class NewsType(models.Model):
name = models.CharField(max_length=30, verbose_name='新闻类型', help_text='名称')
class Meta:
# 指定生成的表名
db_table = 'type'
# 说明信息,再Django后台显示
verbose_name = '类型'
class NewsInfo(models.Model):
title = models.CharField(max_length=100, verbose_name='标题', help_text='标题')
content = models.TextField(max_length=100, verbose_name='内容', help_text='内容')
read = models.IntegerField(verbose_name='阅读量', help_text='阅读量')
comment = models.IntegerField(verbose_name='评论量', help_text='评论量')
type = models.ManyToManyField('NewsType', verbose_name='新闻类型', help_text='新闻类型')
class Meta:
# 指定生成的表名
db_table = 'news'
# 说明信息,再Django后台显示
verbose_name = '新闻'
重新生成迁移文件,并生成数据库表
注册模型
- /Djweb/news/admin.py
from django.contrib import admin
from .models import NewsInfo,NewsType
# Register your models here.
class NewsTypeAdmin(admin.ModelAdmin):
list_display = ['id', 'name']
class NewsInfoAdmin(admin.ModelAdmin):
list_display = ['id', 'title','content','read','comment']
admin.site.register(NewsInfo,NewsInfoAdmin)
admin.site.register(NewsType,NewsTypeAdmin)
- 在命令行注册admin管理员账号
python manage.py createsuperuser
访问网站admin后台
- 在类型页面与新闻页面构造测试数据
- 修改显示数据
增加 str 方法
class NewsType(models.Model):
name = models.CharField(max_length=30, verbose_name='新闻类型', help_text='名称')
class Meta:
# 指定生成的表名
db_table = 'type'
# 说明信息,再Django后台显示
verbose_name = '类型'
def __str__(self):
return self.name
Django模型类查询
模型类的条件查询
聚合函数