大家好

用python的django開發也有一段時間了
對這架構也算是有懂一點皮毛
大致講解一下我設計表單的作法
先說一下ORM的方式
ORM就是使用物件設計來取代傳統的SQL指令方式來建構資料表與query
一開始用肯定會不習慣
但是習慣之後會覺得...還可以
優點是程式可讀性高
可以繼承,修改,然後不用擔心語法錯誤問題

缺點嘛...

遇到很複雜的SQL時候
就會很頭痛了

以下是我DB中的一個範例

 

#MRI報告畫圖

#定義類別名稱
class DicomMriFilesDraw (models.Model):
    #最好設定一個主KEY,否則 django 會自動產生一個id欄位出來,另外是,如果沒有NUMBER類型的主KEY,django 還是會自動產生一個id欄位出來
    #好像是ORM架構都會這樣,這是為了確保每一個ROW都有一個唯一KEY
    mriFid = models.AutoField(primary_key=True, max_length=10, null=False, verbose_name="MRI報告畫圖流水編號(PK)")
    #外鍵: 這邊的DicomMriReports是外鍵,也可以叫母表單的類別
    mriRid = models.ForeignKey(
        DicomMriReports,
        #外鍵名稱: JOIN時候會用到
        related_name = 'mriRidInDicomMriFilesDrawToDicomMriReports',
        #刪除時動作 通常就這個CASCADE
        on_delete    = models.CASCADE,
        #指定名稱,沒指定django又會幫你改名子,頭疼阿
        db_column    = 'mriRid',
    )
    fid = models.ForeignKey(
        DicomFiles,
        related_name = 'fidInDicomMriFilesDrawToDicomFiles',
        on_delete    = models.CASCADE,
        db_column    = 'fid',
    )
    #Text類型資料
    imageBase64      = models.TextField(verbose_name="畫圖資料")
    #文字類型資料
    systemUser       = models.CharField(max_length=10, default='', null=False ,verbose_name="匯入/異動人員", db_index=True)
    #時間類型資料
    systemTime       = models.DateTimeField(auto_now_add=True, null=False ,verbose_name="匯入/異動時間", db_index=True)
    
    #其他設定
    class Meta:
        #指定DN名稱,沒指定django又會調整
        db_table = "DicomMriFilesDraw"
        #增加 unique key 唯一值,驗證資料(注意. 這不是primary key喔)
        unique_together = (('fid', 'systemUser'),)

 

基本上就是這樣
給大家參考囉