Django模型类与后台管理

模型类

模型类设计

在应用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

关系操作

在这里插入图片描述

后台管理

1.本地化

  • 语言和时区的本地化
  • 修改settings.py文件
# 该语言为中文语言配置
LANGUAGE_CODE = 'zh-hans'

# 该时区为美国时区
TIME_ZONE = 'Asia/shanghai'

2.创建管理员

命令:python manage.py createsuperuser

3. 管理员登陆网址

http://127.0.0.1:8000/admin/

4.注册模型类

在应用下的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

重写后更加直观查看数据

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.自定义表单

自定义表单的条件:

  • 创建一个类继承与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)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37662827/article/details/106646872
今日推荐