Model准备
建数据库
>: mysql -uroot -p密码
>: create database day83 charset=utf8;
数据库配置
# settings.py 配置引擎
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名',
'USER': '账号',
'PASSWORD': '密码'
}
}
# __init__.py 配置数据库操作模块
import pymysql
pymysql.install_as_MySQLdb()
表分析
书表Book:name price create_time is_delete authors publish
出版社表Publish:name address phone create_time is_delete
作者表Author:name icon telephone create_time is_delete
作者详情表AuthorDetail:age sex info create_time is_delete author
表关系
Book 与 Publish 一对多
Book 与 Autho 多对多
Author 与 AuthorDetail 一对一
model类
"""
外键处理:
反向查询名字:related_name
表关系:db_constraint + on_delete
db_constraint=False => 断开表关系
on_delete=models.CASCADE 级联
on_delete=models.SET_NULL, null=True 设置为空
on_delete=models.SET_DEFAULT, default=0 设置成默认值0
on_delete=models.DO_NOTHING 不处理
注:多对多关系不需要明确on_delete
"""
from django.conf import settings
class BaseModel(models.Model):
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
is_delete = models.BooleanField(verbose_name='是否删除', default=False)
class Meta:
# 有该属性的Model类不会完成数据库迁移产生一张表 - 基表
abstract = True
class Publish(BaseModel):
name = models.CharField(verbose_name='出版社名', max_length=32)
address = models.CharField(verbose_name='地址', max_length=64)
phone = models.CharField(verbose_name='电话', max_length=32)
class Meta:
db_table = 'o_Publish'
verbose_name = '出版社'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Author(BaseModel):
name = models.CharField(verbose_name='作者名', max_length=32)
icon = models.FileField(upload_to='icon', default='icon/icon.jpg')
telephone = models.CharField(verbose_name='电话', max_length=32)
class Meta:
db_table = 'o_Author'
verbose_name = '作者'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class AuthorDetail(BaseModel):
CHOICE_SEX = (
(0, '男'),
(1, '女')
)
age = models.IntegerField(verbose_name='年龄')
sex = models.IntegerField(verbose_name='性别', choices=CHOICE_SEX, default=0)
info = models.TextField(verbose_name='个人详情')
author = models.OneToOneField(verbose_name='作者', to='Author', db_constraint=False, on_delete=models.CASCADE, related_name='detail')
class Meta:
db_table = 'o_AuthorDetail'
verbose_name = '作者详情'
verbose_name_plural = verbose_name
def __str__(self):
return self.author.name + '的详情'
class Book(BaseModel):
name = models.CharField(