一、設計系統表
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 |
SlugField | Slug是短標籤,只包含字母、數字、下劃線或字符,它通常在網址中使用,需要定義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
分析:
- 發佈會表(Event類)和嘉賓表(Guest類)中默認都會自動生成自增id字段無需聲明;
- 嘉賓表通過event字段關聯發佈會表id字段,一條嘉賓信息對應某一場發佈會;
- 通過發佈會id+嘉賓表phone作爲聯合主鍵,unique_together用於設置兩個字段爲聯合主鍵;
- 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)
知識點:
- ModelAdmin類提供了大量選項針對特別的模塊自定義管理工具;
- EventAdmin繼承admin.ModelAdmin類;
- list_display是其中的一個自定義項,是一個字段名稱的數組,用來顯示列表中的字段;
- 字段名稱必須在模型數據表中;
- 修改admin.site.register()方法,添加EventAdmin類,註冊Event模塊;
- 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用於創建字段過濾器
下節練習數據庫的操作。