<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 第四節:模型常用字段 # 模型常用屬性 ## 常用字段: 在`Django`中,定義了一些`Field`來與數據庫表中的字段類型來進行映射。以下將介紹那些常用的字段類型。 ### AutoField: 映射到數據庫中是`int`類型,可以有自動增長的特性。一般不需要使用這個類型,如果不指定主鍵,那么模型會自動的生成一個叫做`id`的自動增長的主鍵。如果你想指定一個其他名字的并且具有自動增長的主鍵,使用`AutoField`也是可以的。 ### BigAutoField: 64位的整形,類似于`AutoField`,只不過是產生的數據的范圍是從`1-9223372036854775807`。 ### BooleanField: 在模型層面接收的是`True/False`。在數據庫層面是`tinyint`類型。如果沒有指定默認值,默認值是`None`。 ### CharField: 在數據庫層面是`varchar`類型。在`Python`層面就是普通的字符串。這個類型在使用的時候必須要指定最大的長度,也即必須要傳遞`max_length`這個關鍵字參數進去。 ### DateField: 日期類型。在`Python`中是`datetime.date`類型,可以記錄年月日。在映射到數據庫中也是`date`類型。使用這個`Field`可以傳遞以下幾個參數: 1. `auto_now`:在每次這個數據保存的時候,都使用當前的時間。比如作為一個記錄修改日期的字段,可以將這個屬性設置為`True`。 2. `auto_now_add`:在每次數據第一次被添加進去的時候,都使用當前的時間。比如作為一個記錄第一次入庫的字段,可以將這個屬性設置為`True`。 ### DateTimeField: 日期時間類型,類似于`DateField`。不僅僅可以存儲日期,還可以存儲時間。映射到數據庫中是`datetime`類型。這個`Field`也可以使用`auto_now`和`auto_now_add`兩個屬性。 ### TimeField: 時間類型。在數據庫中是`time`類型。在`Python`中是`datetime.time`類型。 ### EmailField: 類似于`CharField`。在數據庫底層也是一個`varchar`類型。最大長度是254個字符。 ### FileField: 用來存儲文件的。這個請參考后面的文件上傳章節部分。 ### ImageField: 用來存儲圖片文件的。這個請參考后面的圖片上傳章節部分。 ### FloatField: 浮點類型。映射到數據庫中是`float`類型。 ### IntegerField: 整形。值的區間是`-2147483648——2147483647`。 ### BigIntegerField: 大整形。值的區間是`-9223372036854775808——9223372036854775807`。 ### PositiveIntegerField: 正整形。值的區間是`0——2147483647`。 ### SmallIntegerField: 小整形。值的區間是`-32768——32767`。 ### PositiveSmallIntegerField: 正小整形。值的區間是`0——32767`。 ### TextField: 大量的文本類型。映射到數據庫中是longtext類型。 ### UUIDField: 只能存儲`uuid`格式的字符串。`uuid`是一個32位的全球唯一的字符串,一般用來作為主鍵。 ### URLField: 類似于`CharField`,只不過只能用來存儲`url`格式的字符串。并且默認的`max_length`是200。 - - - - - - ## Field的常用參數: ### null: 如果設置為`True`,`Django`將會在映射表的時候指定是否為空。默認是為`False`。在使用字符串相關的`Field`(CharField/TextField)的時候,官方推薦盡量不要使用這個參數,也就是保持默認值`False`。因為`Django`在處理字符串相關的`Field`的時候,即使這個`Field`的`null=False`,如果你沒有給這個`Field`傳遞任何值,那么`Django`也會使用一個空的字符串`""`來作為默認值存儲進去。因此如果再使用`null=True`,`Django`會產生兩種空值的情形(NULL或者空字符串)。如果想要在表單驗證的時候允許這個字符串為空,那么建議使用`blank=True`。如果你的`Field`是`BooleanField`,那么對應的可空的字段則為`NullBooleanField`。 ### blank: 標識這個字段在表單驗證的時候是否可以為空。默認是`False`。 這個和`null`是有區別的,`null`是一個純數據庫級別的。而`blank`是表單驗證級別的。 ### db\_column: 這個字段在數據庫中的名字。如果沒有設置這個參數,那么將會使用模型中屬性的名字。 ### default: 默認值。可以為一個值,或者是一個函數,但是不支持`lambda`表達式。并且不支持列表/字典/集合等可變的數據結構。 ### primary\_key: 是否為主鍵。默認是`False`。 ### unique: 在表中這個字段的值是否唯一。一般是設置手機號碼/郵箱等。 更多`Field`參數請參考官方文檔:<https://docs.djangoproject.com/zh-hans/2.0/ref/models/fields/> ## 模型中`Meta`配置: 對于一些模型級別的配置。我們可以在模型中定義一個類,叫做`Meta`。然后在這個類中添加一些類屬性來控制模型的作用。比如我們想要在數據庫映射的時候使用自己指定的表名,而不是使用模型的名稱。那么我們可以在`Meta`類中添加一個`db_table`的屬性。示例代碼如下: ``` <pre class="calibre12">``` <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Book</span><span class="hljs-params">(models.Model)</span>:</span> name = models.CharField(max_length=<span class="hljs-params">20</span>,null=<span class="hljs-keyword">False</span>) desc = models.CharField(max_length=<span class="hljs-params">100</span>,name=<span class="hljs-string">'description'</span>,db_column=<span class="hljs-string">"description1"</span>) <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span>:</span> db_table = <span class="hljs-string">'book_model'</span> ``` ``` 以下將對`Meta`類中的一些常用配置進行解釋。 ### db\_table: 這個模型映射到數據庫中的表名。如果沒有指定這個參數,那么在映射的時候將會使用模型名來作為默認的表名。 ### ordering: 設置在提取數據的排序方式。后面章節會講到如何查找數據。比如我想在查找數據的時候根據添加的時間排序,那么示例代碼如下: ``` <pre class="calibre12">``` <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Book</span><span class="hljs-params">(models.Model)</span>:</span> name = models.CharField(max_length=<span class="hljs-params">20</span>,null=<span class="hljs-keyword">False</span>) desc = models.CharField(max_length=<span class="hljs-params">100</span>,name=<span class="hljs-string">'description'</span>,db_column=<span class="hljs-string">"description1"</span>) pub_date = models.DateTimeField(auto_now_add=<span class="hljs-keyword">True</span>) <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span>:</span> db_table = <span class="hljs-string">'book_model'</span> ordering = [<span class="hljs-string">'pub_date'</span>] ``` ``` 更多的配置后面會慢慢介紹到。 官方文檔:<https://docs.djangoproject.com/en/2.0/ref/models/options/>
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看