WEB接口開發與自動化測試-讀書筆記7 Django模型

一、設計系統表

Django模型基礎知識:

  • 每個模型是一個Python類,繼承django.db.models.Model類。
  • 該模型的每個屬性表示一個數據庫字段。
  • 所有這一切,已經給了你一個自動生成的數據庫訪問的API。

Django模型字段常用類型:

Django模型字段常用類型如表:

類 型說 明
AutoField一個IntegerField類型的自動增量
BooleanField用於存放布爾類型的數據(True or False)
CharField用於存放字符型的數據,需要指定長度max_length
DateField用於存放日期類型的數據,格式爲:YYYY-MM-DD
DecimalField用於存放小數型的數據
EmailField用於存放電子郵件類型的數據
FilePathField用於存放文件路徑類型的數據
FloatField用於存放浮點型的數據
IntegerField用於存放整數類型的數據,範圍是:-2147483648至2147483647
BigIntegerField用於存放大整數類型的數據,最大支持:9223372036854775807
GenericIPAdressField用於存放IP地址類型的數據,同時支持IPv4、IPv6,字符串格式
NullBooleanField類似BooleanField,但是允許填寫NULL
PositiveIntegerField用於存放正數或0的整數類型的數據,範圍是:0-2147483647
PositiveSmallIntegerField類似PositiveIntegerField,但是範圍是:0-32767
SlugFieldSlug是短標籤,只包含字母、數字、下劃線或字符,它通常在網址中使用,需要定義max_length
SmallIntegerField類似IntegerField,但是範圍是:-32768至32767
TextField用於存放文本類型的數據
TimeField用於存放時間類型的數據,格式爲:HH:MM[:ss[.uuuuuu]]
URLField用於存放URL地址
BinaryField用於存放原始二進制類型的數據

詳細內容可參考官方文檔:
https://docs.djangoproject.com/en/1.10/ref/models/fields/

通過模型完成表的創建

打開…/sign/models.py 文件

from django.db import models

# Create your models here.
# 發佈會表
class Event(models.Model):
    name = models.CharField(max_length=100)                   # 發佈會標題
    limit = models.IntegerField()                             # 參加人數
    status = models.BooleanField()                            # 狀態
    address = models.CharField(max_length=200)                # 地址
    start_time = models.DateTimeField('events time')          # 發佈會時間
    create_time = models.DateTimeField(auto_now=True)         # 創建時間(自動獲取當前時間)
    
    def __str__(self):
        return self.name
    
    
# 嘉賓表
class Guest(models.Model):
    event = models.ForeignKey('Event', on_delete=models.CASCADE)                          # 關聯發佈會ID
    realname = models.CharField(max_length=64)                # 姓名
    phone = models.CharField(max_length=16)                   # 手機號
    email = models.EmailField()                               # 郵箱
    sign = models.BooleanField()                              # 簽到狀態
    create_time = models.DateTimeField(auto_now=True)         # 創建時間(自動獲取當前時間)

class Meta:
    unique_together = ("event", "phone")

    def __str__(self):
        return self.realname

分析:

  1. 發佈會表(Event類)和嘉賓表(Guest類)中默認都會自動生成自增id字段無需聲明;
  2. 嘉賓表通過event字段關聯發佈會表id字段,一條嘉賓信息對應某一場發佈會;
  3. 通過發佈會id+嘉賓表phone作爲聯合主鍵,unique_together用於設置兩個字段爲聯合主鍵;
  4. python3使用__str__()方法、python2使用__unicode__()方法,顯示對應字段。

模型創建好以後,執行數據庫遷移。
執行如下命令:
python manage.py makemigrations sign

\guest>python manage.py makemigrations sign
Migrations for 'sign':
  sign\migrations\0001_initial.py
    - Create model Event
    - Create model Guest

python manage.py migrate

\guest>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, sign
Running migrations:
  Applying sign.0001_initial... OK

二、admin後臺管理

在Admin後臺創建發佈會表和嘉賓表界面

打開/guest/sign/admin.py文件。

from django.contrib import admin
from sign.models import Event, Guest

# Register your models here.
admin.site.register(Event)
admin.site.register(Guest)

登錄Admin後臺:http://127.0.0.1:8000/admin/
在這裏插入圖片描述點擊Events對應的Add添加一條發佈會信息。
在這裏插入圖片描述admin後臺管理顯示錶中更多字段。繼續修改/guest/sign/admin.py文件。

from django.contrib import admin
from sign.models import Event, Guest

# Register your models here.
class EventAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', 'status', 'address', 'start_time']
class GuestAdmin(admin.ModelAdmin):
    list_display = ['realname', 'phone', 'email', 'sign', 'create_time', 'event']

admin.site.register(Event, EventAdmin)
admin.site.register(Guest, GuestAdmin)

知識點:

  1. ModelAdmin類提供了大量選項針對特別的模塊自定義管理工具;
  2. EventAdmin繼承admin.ModelAdmin類;
  3. list_display是其中的一個自定義項,是一個字段名稱的數組,用來顯示列表中的字段;
  4. 字段名稱必須在模型數據表中;
  5. 修改admin.site.register()方法,添加EventAdmin類,註冊Event模塊;
  6. Guest模塊同上。

我們來看下Admin後臺管理:
在這裏插入圖片描述添加一條嘉賓(Guest)信息
在這裏插入圖片描述

生成搜索欄和過濾器

繼續修改/guest/sign/admin.py文件。

......
# Register your models here.
class EventAdmin (admin.ModelAdmin):
    list_display = ['id', 'name', 'status', 'address', 'start_time']
    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']                   # 過濾器
......

知識點:
search_fields用於創建搜索器
list_filter用於創建字段過濾器
在這裏插入圖片描述下節練習數據庫的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章