zoukankan      html  css  js  c++  java
  • django模型005

    除此之外,Admin 管理后台提供了的很强的定制性,我们甚至可以非常方便生成搜索栏和过滤器。重新

    打开.../sign/admin.py 文件,做如下修改。

    # Register your models here.
    class EventAdmin(admin.ModelAdmin):

    list_display = ['name', 'status', 'start_time','id'] search_fields = ['name'] #搜索栏
    list_filter = ['status'] #过滤器

    class GuestAdmin(admin.ModelAdmin):

    list_display = ['realname', 'phone','email','sign','create_time','event'] search_fields = ['realname','phone'] #搜索栏
    list_filter = ['sign'] #过滤器

    ......

    基本数据访问

    manage.py 提供的 shell 命令,可以在该来模式下练习数据库表

    的操作。

    python3 manage.py shell

    from datetime import datetime

    >>> e1 = Event(id=2,name='红米 Pro 发布会',limit=2000,status=True,address='北京水立 方',start_time=datetime(2016,8,10,14,0,0))

    >>> e1.save() C:Python35libsite-packagesdjangodbmodelsfields\__init__.py:1453:

    虫师原创----http://fnng.cnblogs.com

    page66image1655856page66image1772480page66image1655232page66image1777632

    66

    page67image1656896

    虫师原创----http://fnng.cnblogs.comRuntimeWarning: DateTimeField Event.start_time received a naive datetime

    (2016-08-10 14:00:00) while time zone support is active. RuntimeWarning)

    因为 start_time 字段需要设置日期时间,所以导入和 datetime.datetime()方法。但是,我们收到了一行警告 信息“RuntimeWarning: DateTimeField Event.start_time received a naive datetime (2016-08-10 14:00:00) while time zone support is active.”

    这跟 UTC 有关,如果读者感兴趣可以百度 UTC 是什么?这里,我们暂时忽略掉这个问题,最简单的方 式就是在.../settings.py 文件中设置:USE_TZ = False。

    修改 settings.py 文件保存后,需要执行“quit()”命令退出 shell 模式,并重新执行“Python3 manage.py shell” 进入,刚才的设置才会生效。

    如果你觉得创建和保存分两步完成过于麻烦,也可以通过 table.objects.create()方法将两步合为一步,方 法如下。

    ......
    >>> Event.objects.create(id=3,name='红米 MAX 发布会',limit=2000,status=True, address='北京会展中心',start_time=datetime(2016,9,22,14,0,0))
    <Event: 红米 MAX 发布会>
    >>> Guest.objects.create(realname='andy',phone=13611001101,email= 'andy@mail.com',sign=False,event_id=3)
    <Guest: andy>

    需要说明的是,表的 id 字段已经设置了自增,所以,该字段为空可以添加数据,但在创建嘉宾时数据时 需要指定关联的发布会 id。Event 表指定了 id=3,Guest 表指定 event_id=3,所以嘉宾 andy 对应的是红米 MAX发布会。

    4.3.2、查询数据查询无疑是数据库表中使用频率最高的操作。

    table.objects.get()方法用于从数据库表中取得一条匹配的结果,返回一个对象,如果记录不存在的话,那 么它会报 DoesNotExist 类型错误。

    page67image1601776page67image1787936page67image1663760

    67

    page68image1635264

    通过 name='红米 MAX 发布会' 做为查询条件:

    ......
    >>> e1 = Event.objects.get(name='红米 MAX 发布会') >>> e1
    <Event: 红米 MAX 发布会>
    >>> e1.address
    '北京会展中心'
    >>> e1.start_time
    datetime.datetime(2016, 9, 22, 14, 0)
    >>>
    >>> Event.objects.get(name='红米 MAX 发布会').status True
    >>> Event.objects.get(name='红米 MAX 发布会').limit 2000
    >>> Event.objects.get(name='发布会').address Traceback (most recent call last):

    File "<console>", line 1, in <module>

    File "C:Python35libsite-packagesdjangodbmodelsmanager.py", line 85, in manager_method

    return getattr(self.get_queryset(), name)(*args, **kwargs)
    File "C:Python35libsite-packagesdjangodbmodelsquery.py", line 385, in get

    self.model._meta.object_name
    sign.models.DoesNotExist: Event matching query does not exist.

    因为 name='发布会' 并没有完全匹配到发布会名称,所以会抛出 DoesNotExist 异常,但更多的时候希望 使用模糊查询。

    table.objects.filter()方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会 返回[]。

    ......
    >>> e2 = Event.objects.filter(name__contains='发布会')
    >>> e2
    <QuerySet [<Event: 小米 5 发布会>, <Event: 红米 Pro 发布会>, <Event: 红米 MAX 发布会>]>

    虫师原创----http://fnng.cnblogs.com

    page68image1774048page68image1674784page68image1774496page68image1670208

    68

    page69image3699760

    虫师原创----http://fnng.cnblogs.com在 name 和 contains 之间用双下划线。这里,contains 部分会被 Django 翻译成 LIKE 语句。

    接下来,通过嘉宾信息查询其关联的发布会信息。查看 phone='13611001101' 这位嘉宾所参加的发布会信 息:

    ......

    >>> g1 = Guest.objects.get(phone='13611001101') >>> g1.event
    <Event: 红米 MAX 发布会>
    >>> g1.event.name

    '红米 MAX 发布会'
    >>> g1.event.address '北京会展中心'

    4.3.3、删除数据
    查询 phone='13611001101' 的嘉宾,通过 delete()方法删除。

    ......

    >>> g2 = Guest.objects.get(phone='13611001101') >>> g2.delete()
    (1, {'sign.Guest': 1})

    >>> Guest.objects.get(phone='13611001101').delete() (1, {'sign.Guest': 1})

    4.3.4、更新数据
    查询 phone='13611001101' 的嘉宾,更新 realname='andy2' 。

    page69image1782784page69image1668128page69image1776288page69image1632768page69image1780096

    ......

    69

    page70image3688736

    >>> g3=Guest.objects.get(phone='13611001101') >>> g3.realname='andy2'
    >>> g3.save()

    >>> Guest.objects.select_for_update().filter(phone='13611001101').update( realname='andy')

  • 相关阅读:
    document.getElementById("mytxt").style.left=""style.left在IE的FF中注意
    asp.net 用户控件中 使用相对路径的解决方法 图片路径问题(用户控件、图片路径) ,ResolveUrl
    探索 Block (一) (手把手讲解Block 底层实现原理)
    iOS 多线程开发 (概念与API简介)
    iOS 性能小点
    iOS runtime (二)(runtime学习之AutoCoding源码分析)
    探索 NSRunLoop (二)(NSRunLoop 自己动手实现SimpleRunLoop)
    iOS NSNotificationCenter (自己实现一个通知中心XMCNotificationCenter)
    iOS runtime (三)(runtime学习之YYModel源码分析)
    iOS runtime(一)(runtime 分析理解)
  • 原文地址:https://www.cnblogs.com/lhdcg/p/9942783.html
Copyright © 2011-2022 走看看