在应用models.py
中设计模型类,在设计类的过程中必须继承于models.Model
这个类
BookInfo
类Models.ForeignKey
可以建立两个模型类之间一对多的关系,Django在生成表的上号,就会在多的表中创建一列作为外键,建立两个表之间一对多的关系。models.py
from django.db import models
# 该models为设计表的类和模型
# Create your models here.
# 图书类
# 继承于models.Model这个模型
# Django会默认的创建出主键id来
class BookInfo(models.Model):
"""图书类"""
# 该CharField 为字符串字段d,max_length为设置最大的字符串的长度
title = models.CharField(max_length=20)
# 该DateField 为日期类型
press_time = models.DateField()
什么是迁移文件?
迁移文件就是把你创建出来的模型类来生成出对应的操作数据库的文件
python manage.py makemigrations
生成的迁移文件
0001_initial.py
# Generated by Django 3.0.7 on 2020-06-08 04:06
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='BookInfo',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=20)),
('press_time', models.DateField()),
],
),
]
什么是迁移表?
根据迁移文件生成表,
python manage.py migrate
进入项目shell的命令
python manage.py shell
from booktest.models import BookInfo
b = BookInfo()
save
: 提交数据保存操作例子如下:
(Django框架-JEQCbmfB) $ python manage.py shell
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from booktest.models import BookInfo
>>> # 实例化类
>>> b = BookInfo()s
>>> # 调用类的实例属性进行操作
>>> # 该操作要先进行生成迁移文件并执行迁移文件后的操作
>>> b.book_name = "Python数据分析"
>>> from datetime import date
>>> b.press_time = date(2020,6,8)
>>> # 进行数据保存
>>> b.save()
>>> # Django会自动生成id只
>>> # Django会自动生成id值
>>> data = BookInfo.objects.get(id=1)
>>> type(data)
<class 'booktest.models.BookInfo'>
>>> data.book_name
'Python数据分析'
>>> data.press_time
datetime.date(2020, 6, 8)
>>> data.id
1
>>> data.save()
>>> data.book_name
'Python数据分析'
查询图书表里面的所有内容
BookInfo.objects.all()
HeroInfo.objects.all()
(Django框架-JEQCbmfB) $ python manage.py shell
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> # 导入库
>>> from booktest.models import BookInfo,HeroInfo
>>> b = BookInfo()
>>> # 进行添加数据
>>> b.book_name = '利用Python进行数据分析'
>>> from datetime import date
>>> b.press_time = date(2020,6,8)
>>> h = HeroInfo()
>>> h.hname = 'pandas使用'
>>> h.gender = False
>>> h.hcomment = '这是一个数据分析的库'
>>> h.hbook = b
>>> h.save()
>>> b.save()
>>> h3 = HeroInfo.objects.get(id=1)
>>> h3.hname
'pandas使用'
>>> h.hbook
<BookInfo: BookInfo object (1)>
>>> h.hbook_id
1
>>> h.hcomment
'这是一个数据分析的库'
>>> h.gender
False
关系操作
settings.py
文件# 该语言为中文语言配置
LANGUAGE_CODE = 'zh-hans'
# 该时区为美国时区
TIME_ZONE = 'Asia/shanghai'
命令:python manage.py createsuperuser
http://127.0.0.1:8000/admin/
在应用下的admin.py
中注册模型类
告诉Django框架根据注册的模型类来生成对应表管理页面
admin.py
from django.contrib import admin
from booktest.models import BookInfo
from booktest.models import HeroInfo
# 该文件为超级用户员管理文件
# Register your models here.
# 添加模型类
# site : 翻译为地点的意思
# register : 登记表
admin.site.register(BookInfo)
admin.site.register(HeroInfo)
为什么要重写模类中的__str__
在页面查询出来的结果为实例化对象,当我们想进行想打印其他内容的时候,可以调用__str__
这个方法来进行操作
>>> from booktest.models import BookInfo
>>> b = BookInfo.objects.get(book_name = '利用Python进行数据分析')
>>> b
<BookInfo: BookInfo object (1)>
>>> str(b)
'BookInfo object (1)'
models.py
from django.db import models
# Create your models here.
# 创建一个图书类
class BookInfo(models.Model):
"""
图书类
"""
book_name = models.CharField(max_length=20)
press_time = models.DateField()
def __str__(self):
"""重写该方法"""
return self.book_name
class HeroInfo(models.Model):
"""
英雄类
"""
hname = models.CharField(max_length=20)
hgender = models.BooleanField(default=False)
hcomment = models.CharField(max_length=20)
hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE)
def __str__(self):
"""重写该方法"""
return self.hname
重写后更加直观查看数据
自定义表单的条件:
admin.ModelAdmin
admin.site.regsiter()
自定义管理类。模型管理类就是告诉Django
在生成的管理页面上显示哪些内容
admin.py
from django.contrib import admin
from booktest.models import BookInfo
from booktest.models import HeroInfo
# 该文件为超级用户员管理文件
# Register your models here.
# 自定义模型类
# 继承与admim中的ModelAdmin
class BookInfoAdmin(admin.ModelAdmin):
# 注意list_display对应着模型类的字段
list_display = ['id', 'book_name', 'press_time']
class HeroInfoAdmin(admin.ModelAdmin):
list_display = ['id', 'hname', 'hgender', 'hcomment', 'hbook']
# 添加模型类
# site : 翻译为地点的意思
# register : 登记表
admin.site.register(BookInfo, BookInfoAdmin)
admin.site.register(HeroInfo, HeroInfoAdmin)