最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python的Django框架中設(shè)置日期和字段可選的方法

 更新時間:2015年07月17日 14:39:40   投稿:goldensun  
這篇文章主要介紹了Python的Django框架中設(shè)置日期和字段可選的方法,是Django設(shè)置當(dāng)中的基本操作,需要的朋友可以參考下

設(shè)置字段可選

在擺弄了一會之后,你或許會發(fā)現(xiàn)管理工具有個限制:編輯表單需要你填寫每一個字段,然而在有些情況下,你想要某些字段是可選的。 舉個例子,我們想要Author模塊中的email字段成為可選,即允許不填。 在現(xiàn)實世界中,你可能沒有為每個作者登記郵箱地址。

為了指定email字段為可選,你只要編輯Book模塊(回想第五章,它在mysite/books/models.py文件里),在email字段上加上blank=True。代碼如下:

class Author(models.Model):
  first_name = models.CharField(max_length=30)
  last_name = models.CharField(max_length=40)
  email = models.EmailField(**blank=True** )

這些代碼告訴Django,作者的郵箱地址允許輸入一個空值。 所有字段都默認(rèn)blank=False,這使得它們不允許輸入空值。

這里會發(fā)生一些有趣的事情。 直到現(xiàn)在,除了__unicode__()方法,我們的模塊充當(dāng)數(shù)據(jù)庫中表定義的角色,即本質(zhì)上是用Python的語法來寫CREATE TABLE語句。 在添加blank=True過程中,我們已經(jīng)開始在簡單的定義數(shù)據(jù)表上擴展我們的模塊了。 現(xiàn)在,我們的模塊類開始成為一個富含Author對象屬性和行為的集合了。 email不但展現(xiàn)為一個數(shù)據(jù)庫中的VARCHAR類型的字段,它還是頁面中可選的字段,就像在管理工具中看到的那樣。

當(dāng)你添加blank=True以后,刷新頁面Add author edit form (http://127.0.0.1:8000/admin/books/author/add/ ),將會發(fā)現(xiàn)Email的標(biāo)簽不再是粗體了。 這意味它不是一個必填字段。 現(xiàn)在你可以添加一個作者而不必輸入郵箱地址,即使你為這個字段提交了一個空值,也再不會得到那刺眼的紅色信息“This field is required”。
設(shè)置日期型和數(shù)字型字段可選

雖然blank=True同樣適用于日期型和數(shù)字型字段,但是這里需要詳細講解一些背景知識。

SQL有指定空值的獨特方式,它把空值叫做NULL。NULL可以表示為未知的、非法的、或其它程序指定的含義。

在SQL中, NULL的值不同于空字符串,就像Python中None不同于空字符串("")一樣。這意味著某個字符型字段(如VARCHAR)的值不可能同時包含NULL和空字符串。

這會引起不必要的歧義或疑惑。 為什么這條記錄有個NULL,而那條記錄卻有個空字符串? 它們之間有區(qū)別,還是數(shù)據(jù)輸入不一致? 還有: 我怎樣才能得到全部擁有空值的記錄,應(yīng)該按NULL和空字符串查找么?還是僅按字符串查找?

為了消除歧義,Django生成CREATE TABLE語句自動為每個字段顯式加上NOT NULL。 這里有個生成Author模塊的例子:

CREATE TABLE "books_author" (
  "id" serial NOT NULL PRIMARY KEY,
  "first_name" varchar(30) NOT NULL,
  "last_name" varchar(40) NOT NULL,
  "email" varchar(75) NOT NULL
)
;

在大多數(shù)情況下,這種默認(rèn)的行為對你的應(yīng)用程序來說是最佳的,因為它可以使你不再因數(shù)據(jù)一致性而頭痛。 而且它可以和Django的其它部分工作得很好。如在管理工具中,如果你留空一個字符型字段,它會為此插入一個空字符串(而* 不是*NULL)。

但是,其它數(shù)據(jù)類型有例外:日期型、時間型和數(shù)字型字段不接受空字符串。 如果你嘗試將一個空字符串插入日期型或整數(shù)型字段,你可能會得到數(shù)據(jù)庫返回的錯誤,這取決于那個數(shù)據(jù)庫的類型。 (PostgreSQL比較嚴(yán)禁,會拋出一個異常;MySQL可能會也可能不會接受,這取決于你使用的版本和運氣了。)在這種情況下,NULL是唯一指定空值的方法。 在Django模塊中,你可以通過添加null=True來指定一個字段允許為NULL。

因此,這說起來有點復(fù)雜: 如果你想允許一個日期型(DateField、TimeField、DateTimeField)或數(shù)字型(IntegerField、DecimalField、FloatField)字段為空,你需要使用null=True * 和* blank=True。

為了舉例說明,讓我們把Book模塊修改成允許 publication_date為空。修改后的代碼如下:

class Book(models.Model):
  title = models.CharField(max_length=100)
  authors = models.ManyToManyField(Author)
  publisher = models.ForeignKey(Publisher)
  publication_date = models.DateField(**blank=True, null=True** )

添加null=True比添加blank=True復(fù)雜。因為null=True改變了數(shù)據(jù)的語義,即改變了CREATE TABLE語句,把publication_date字段上的NOT NULL刪除了。 要完成這些改動,我們還需要更新數(shù)據(jù)庫。

出于某種原因,Django不會嘗試自動更新數(shù)據(jù)庫結(jié)構(gòu)。所以你必須執(zhí)行ALTER TABLE語句將模塊的改動更新至數(shù)據(jù)庫。 像先前那樣,你可以使用manage.py dbshell進入數(shù)據(jù)庫服務(wù)環(huán)境。 以下是在這個特殊情況下如何刪除NOT NULL:

ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;

(注意:以下SQL語法是PostgreSQL特有的。)

我們將在第十章詳細講述數(shù)據(jù)庫結(jié)構(gòu)更改。

現(xiàn)在讓我們回到管理工具,添加book的編輯頁面允許輸入一個空的publication date。

相關(guān)文章

  • Scrapy之迭代爬取網(wǎng)頁中失效問題及解決

    Scrapy之迭代爬取網(wǎng)頁中失效問題及解決

    這篇文章主要介紹了Scrapy之迭代爬取網(wǎng)頁中失效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python利用tenacity庫處理超時重試機制詳解

    Python利用tenacity庫處理超時重試機制詳解

    Python?的?tenacity?庫用于實現(xiàn)重試機制,特別適合處理網(wǎng)絡(luò)不穩(wěn)定或其他意外錯誤導(dǎo)致的函數(shù)調(diào)用失敗,下面我們就來看看它的具體使用吧
    2025-02-02
  • 對Python subprocess.Popen子進程管道阻塞詳解

    對Python subprocess.Popen子進程管道阻塞詳解

    今天小編就為大家分享一篇對Python subprocess.Popen子進程管道阻塞詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python3.5內(nèi)置模塊之time與datetime模塊用法實例分析

    Python3.5內(nèi)置模塊之time與datetime模塊用法實例分析

    這篇文章主要介紹了Python3.5內(nèi)置模塊之time與datetime模塊用法,結(jié)合實例形式分析了Python3.5 time與datetime模塊日期時間相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • Python打包成.exe可執(zhí)行文件的詳細步驟

    Python打包成.exe可執(zhí)行文件的詳細步驟

    在Python中,可以使用一些工具將Python代碼打包成可執(zhí)行文件(.exe)以便在沒有安裝Python解釋器的環(huán)境中運行,本文通過圖文結(jié)合的方式給大家詳細介紹了Python打包成.exe可執(zhí)行文件的步驟,需要的朋友可以參考下
    2024-04-04
  • pycharm如何關(guān)閉pytest

    pycharm如何關(guān)閉pytest

    這篇文章主要介紹了pycharm如何關(guān)閉pytest問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Win7上搭建Cocos2d-x 3.1.1開發(fā)環(huán)境

    Win7上搭建Cocos2d-x 3.1.1開發(fā)環(huán)境

    現(xiàn)在,越來越多的公司采用Cocos2d-x 3.0來開發(fā)游戲了,但是現(xiàn)在這樣的文章并不多,所以打算寫一系列來幫助初學(xué)者快速掌握Cocos2d-x 3.0。首先就從開發(fā)環(huán)境的大家說起吧
    2014-07-07
  • Django與圖表的數(shù)據(jù)交互的實現(xiàn)

    Django與圖表的數(shù)據(jù)交互的實現(xiàn)

    本文主要介紹了Django與圖表的數(shù)據(jù)交互的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 關(guān)于Pytorch的MNIST數(shù)據(jù)集的預(yù)處理詳解

    關(guān)于Pytorch的MNIST數(shù)據(jù)集的預(yù)處理詳解

    今天小編就為大家分享一篇關(guān)于Pytorch的MNIST數(shù)據(jù)集的預(yù)處理詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python利用多線程優(yōu)化for循環(huán)的技巧分享

    Python利用多線程優(yōu)化for循環(huán)的技巧分享

    多線程可以讓程序同時執(zhí)行多個任務(wù),從而提高整體運行效率,這篇文章將詳細介紹如何在Python中使用多線程來優(yōu)化for循環(huán),感興趣的可以了解下
    2025-02-02

最新評論

庆城县| 扎赉特旗| 武城县| 白城市| 靖安县| 宾川县| 宁陕县| 景谷| 通渭县| 大理市| 米林县| 吴忠市| 大姚县| 潜江市| 宁都县| 鄂伦春自治旗| 承德县| 马边| 云安县| 石狮市| 绥棱县| 滦南县| 三亚市| 遂昌县| 阜平县| 泾川县| 九江县| 宕昌县| 宁远县| 乐东| 桐城市| 遵义市| 济宁市| 深泽县| 浦北县| 成安县| 泰顺县| 黄大仙区| 柘荣县| 仁布县| 东丽区|