zoukankan      html  css  js  c++  java
  • Django 测试开发3 数据模型models和admin管理工具

    参考:https://blog.csdn.net/weixin_44510615/article/details/89425412

    首先搭建你的mysql服务,保证能正常运行

    pip install mysqlclient==1.3.12 --index-url https://pypi.douban.com/simple

    修改seting配置

    1、Django模型字段常用类型:

    IntegerField : 整型,映射到数据库中的int类型。
    CharField: 字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度,且必须包含max_length指定最大字段
    TextField: 文本类型,映射到数据库中的text类型。
    BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去。如果要可以为空,则用NullBooleanField。
    DateField: 日期类型,没有时间。映射到数据库中是date类型,
    在使用的时候,可以设置DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设置DateField.auto_now_add当对象第一次被创建时自动设置当前时间。
    DateTimeField: 日期时间类型。映射到数据库中的是datetime类型,
    在使用的时候,传递datetime.datetime()进去。
    mailField :电子邮件类型。

    class PersonsInfo(models.Model):
        name = models.CharField(max_length=30,null=False,blank=False)  #CharField必须有max_length
        agex = models.IntegerField(null=True,blank=True)
        mail = models.EmailField(default="123.qq.com")
        tel = models.BigIntegerField(null=True,blank=True)   #20
        text = models.TextField(null=True,blank=True)   #大文本
        img = models.ImageField(default='')
        file = models.FileField(default='')
        b = models.BooleanField(default=True)
        date = models.DateField(auto_now_add=True,null=True,blank=True)           #2020-06-20
        time = models.TimeField(auto_now_add=True,null=True,blank=True)           #21:07:01
        data_time = models.DateTimeField(auto_now_add=True,null=True,blank=True)  # 2020-06-20 21:07:01
        create_time = models.DateTimeField(auto_now_add=True,null=True,blank=True)  #创建时间
        update_time = models.DateTimeField(auto_now=True,null=True,blank=True)
    
    class PersonsInfoNew(models.Model):
        '''个人信息'''
        #verbose_name 在admin后台字段展示中文
        tel = models.BigIntegerField(verbose_name='电话',null=True,blank=True)
        name = models.CharField(verbose_name='姓名',max_length=30,null=False,blank=False)
        mail = models.EmailField(verbose_name='邮箱',default="123.qq.com")
        create_time = models.DateTimeField(verbose_name='创建时间',auto_now_add=True, null=True, blank=True)

    2、联合主键

    #联合主键
        class Meta:
            unique_together = ('字段1','字段2')

    3、 __str__ ()方法是Python的内置方法,需要返回一个字符串,当做这个对象的描写,如果不定义这个方法,查询数据返回的就是类名,定义方法之后返回的就是定义的字段中的数据,直观的显示这个数据是谁下面的代码查询返回显示的就是name字段储存的数据。

    class SampleTest(models.Model):
        name = models.CharField(max_length=100) 
        .......
    
        def __str__(self):
            return self.name

     4、当模型建立好了执行数据迁移

    python manage.py makemigrations  应用名    

    python manage.py migrate

     5、Admin为数据模块提供界面。

    ModelAdmin参数介绍:在注册admin时,通过继承ModelAdmin,设置相应的字段能够自定义model表在admin后台的显式格式。

    list_display = ('__str__',): 设置model表需要显示的字段,未设置时只显示__str__()的返回值。search_fields = []:搜索栏 。list_filter = [] #过滤器

    from django.contrib import admin
    from .models import Event,Guest
    # Register your models here.
    
    #Event模型的管理器
    class EventAdmin(admin.ModelAdmin):
        # 设置哪些字段可以点击进入admin编辑界面
        list_display = ['id','name','limit','status','address','start_time','create_time']
        search_fields = ['name'] #搜索栏
        list_filter = ['status'] #过滤器
    
    #Guest模型的管理器
    class GuestAdmin(admin.ModelAdmin):
        # 设置哪些字段可以点击进入admin编辑界面
        list_display = ['realname','phone','email','sign','create_time','event']
        search_fields = ['realname','phone'] #搜索栏
        list_filter = ['sign']                #过滤器
    
    #在admin中注册绑定,不对EventAdmin进行绑定就会只注册Event,在admin后台只显示Event。
    admin.site.register(Event,EventAdmin)
    admin.site.register(Guest,GuestAdmin)

      5、基本数据访问。

    进入python manage.py shell  >导入相应的类

    获得table中的所有对象:table.objects.all()

    获得某一条数据对象:table.objects.get(条件)                                    如果数据不存在会报错

    获取匹配结果返回列表:table.objects.filter(条件)                              如果记录不存在返回空列表[]  

    table.objects.filter(字段__contains='XX')                                          字段+双下划线+contains 的效果类似sql里的like模糊匹配

    新增一条数据:table.objects.create()

    删除一条数据:t1 = table.objects.get(条件) t1.delete()            最好先查询,再执行删除。

    修改一条数据:t1 = table.objects.get(条件) t1.update(XX='YYY')   最好先查询,再执行更新。

    使用get查询时,当有一条数据可以正常查询,当返回多条数据时会引发报错,当没有返回数据也会引发报错,所以get适合查询唯一的数据,配合try...except使用;filter查询会返回列表,适合查询不唯一的数据,当没有查询到数据时返回空列表,当返回查询数据时,可以用过列表的下标来访问。

    6、连接数据库。

    首先要先配置mysql 数据库,参考我之前写的随笔文章。然后安装PyMySQL驱动操作MySql    pip install pymysql 

    在__init__.py文件中添加配置:

    import pymysql
    pymysql.install_as_MySQLdb()

    然后执行数据库同步: python manage.py migrate

    由于更换了数据库,所以Admin后台超级管理员也需要重新创建python manage.py createsuperuser

    修改seting中语言和时区

    LANGUAGE_CODE = 'zh-Hans'  #简体中文
    TIME_ZONE = 'Asia/Shanghai' #亚洲上海时区
    USE_TZ = False   #设置成False,不然数据库时间和当前时间不一致

    安装Mysql管理工具Navicat。配置文档也在我的随笔中。

  • 相关阅读:
    前端HTMLCSS
    jedis 连接池的使用
    win8+安装net3.5步骤与常见错误.
    并行线程的生命周期
    OneNote截图快捷键冲突解决方案
    C#中lsitView如何搜索某个子项
    redis哨兵与集群
    git笔记
    微软官方Hololens开发课程介绍
    Markdown使用入门简介
  • 原文地址:https://www.cnblogs.com/wzjbg/p/11626786.html
Copyright © 2011-2022 走看看