免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
字段的參數(shù)

該系列教程系個人原創(chuàng),并完整發(fā)布在個人官網(wǎng)劉江的博客和教程

所有轉(zhuǎn)載本文者,需在頂部顯著位置注明原作者及www.liujiangblog.com官網(wǎng)地址。


所有的模型字段都可以接收一定數(shù)量的參數(shù),比如CharField至少需要一個max_length參數(shù)。下面的這些參數(shù)是所有字段都可以使用的,并且是可選的。

null

該值為True時,Django在數(shù)據(jù)庫用NULL保存空值。默認(rèn)值為False。對于保存字符串類型數(shù)據(jù)的字段,請盡量避免將此參數(shù)設(shè)為True,那樣會導(dǎo)致兩種‘沒有數(shù)據(jù)’的情況,一種是NULL,另一種是‘空字符串’。

blank

True時,字段可以為空。默認(rèn)False。和null參數(shù)不同的是,null是純數(shù)據(jù)庫層面的,而blank是驗(yàn)證相關(guān)的,它與表單驗(yàn)證是否允許輸入框內(nèi)為空有關(guān),與數(shù)據(jù)庫無關(guān)。所以要小心一個null為False,blank為True的字段接收到一個空值可能會出bug或異常。

choices

用于頁面上的選擇框標(biāo)簽,需要先提供一個二維的二元元組,第一個元素表示存在數(shù)據(jù)庫內(nèi)真實(shí)的值,第二個表示頁面上顯示的具體內(nèi)容。在瀏覽器頁面上將顯示第二個元素的值。例如:

    YEAR_IN_SCHOOL_CHOICES = (        ('FR', 'Freshman'),        ('SO', 'Sophomore'),        ('JR', 'Junior'),        ('SR', 'Senior'),        ('GR', 'Graduate'),    )

一般來說,最好將選項(xiàng)定義在類里,并取一個直觀的名字,如下所示:

from django.db import modelsclass Student(models.Model):    FRESHMAN = 'FR'    SOPHOMORE = 'SO'    JUNIOR = 'JR'    SENIOR = 'SR'    YEAR_IN_SCHOOL_CHOICES = (        (FRESHMAN, 'Freshman'),        (SOPHOMORE, 'Sophomore'),        (JUNIOR, 'Junior'),        (SENIOR, 'Senior'),    )    year_in_school = models.CharField(        max_length=2,        choices=YEAR_IN_SCHOOL_CHOICES,        default=FRESHMAN,    )    def is_upperclass(self):        return self.year_in_school in (self.JUNIOR, self.SENIOR)

要獲取一個choices的第二元素的值,可以使用get_FOO_display()方法,其中的FOO用字段名代替。對于下面的例子:

from django.db import modelsclass Person(models.Model):    SHIRT_SIZES = (    ('S', 'Small'),    ('M', 'Medium'),    ('L', 'Large'),    )    name = models.CharField(max_length=60)    shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)

使用方法:

>>> p = Person(name="Fred Flintstone", shirt_size="L")>>> p.save()>>> p.shirt_size'L'>>> p.get_shirt_size_display()'Large'

db_column

該參數(shù)用于定義當(dāng)前字段在數(shù)據(jù)表內(nèi)的列名。如果未指定,Django將使用字段名作為列名。

db_index

該參數(shù)接收布爾值。如果為True,數(shù)據(jù)庫將為該字段創(chuàng)建索引。

db_tablespace

用于字段索引的數(shù)據(jù)庫表空間的名字,前提是當(dāng)前字段設(shè)置了索引。默認(rèn)值為工程的DEFAULT_INDEX_TABLESPACE設(shè)置。如果使用的數(shù)據(jù)庫不支持表空間,該參數(shù)會被忽略。

default

字段的默認(rèn)值,可以是值或者一個可調(diào)用對象。如果是可調(diào)用對象,那么每次創(chuàng)建新對象時都會調(diào)用。設(shè)置的默認(rèn)值不能是一個可變對象,比如列表、集合等等。lambda匿名函數(shù)也不可用于default的調(diào)用對象,因?yàn)槟涿瘮?shù)不能被migrations序列化。

注意:在某種原因不明的情況下將default設(shè)置為None,可能會引發(fā)intergyerror:not null constraint failed,即非空約束失敗異常,導(dǎo)致python manage.py migrate失敗,此時可將None改為False或其它的值,只要不是None就行。

editable

如果設(shè)為False,那么當(dāng)前字段將不會在admin后臺或者其它的ModelForm表單中顯示,同時還會被模型驗(yàn)證功能跳過。參數(shù)默認(rèn)值為True。

error_messages

用于自定義錯誤信息。參數(shù)接收字典類型的值。字典的鍵可以是null、 blankinvalid、 invalid_choice、 uniqueunique_for_date其中的一個。

help_text

額外顯示在表單部件上的幫助文本。使用時請注意轉(zhuǎn)義為純文本,防止腳本攻擊。

primary_key

如果你沒有給模型的任何字段設(shè)置這個參數(shù)為True,Django將自動創(chuàng)建一個AutoField自增字段,名為‘id’,并設(shè)置為主鍵。也就是id = models.AutoField(primary_key=True)。

如果你為某個字段設(shè)置了primary_key=True,則當(dāng)前字段變?yōu)橹麈I,并關(guān)閉Django自動生成id主鍵的功能。

primary_key=True隱含null=Falseunique=True的意思。一個模型中只能有一個主鍵字段!

另外,主鍵字段不可修改,如果你給某個對象的主鍵賦個新值實(shí)際上是創(chuàng)建一個新對象,并不會修改原來的對象。

from django.db import modelsclass Fruit(models.Model):    name = models.CharField(max_length=100, primary_key=True)###############    >>> fruit = Fruit.objects.create(name='Apple')>>> fruit.name = 'Pear'>>> fruit.save()>>> Fruit.objects.values_list('name', flat=True)['Apple', 'Pear']

unique

設(shè)為True時,在整個數(shù)據(jù)表內(nèi)該字段的數(shù)據(jù)不可重復(fù)。

注意:對于ManyToManyField和OneToOneField關(guān)系類型,該參數(shù)無效。

注意: 當(dāng)unique=True時,db_index參數(shù)無須設(shè)置,因?yàn)閡nqiue隱含了索引。

注意:自1.11版本后,unique參數(shù)可以用于FileField字段。

unique_for_date

日期唯一??赡懿惶美斫?。舉個栗子,如果你有一個名叫title的字段,并設(shè)置了參數(shù)unique_for_date="pub_date",那么Django將不允許有兩個模型對象具備同樣的title和pub_date。有點(diǎn)類似聯(lián)合約束。

unique_for_month

同上,只是月份唯一。

unique_for_year

同上,只是年份唯一。

verbose_name

為字段設(shè)置一個人類可讀,更加直觀的別名。

對于每一個字段類型,除了ForeignKey、ManyToManyFieldOneToOneField這三個特殊的關(guān)系類型,其第一可選位置參數(shù)都是verbose_name。如果沒指定這個參數(shù),Django會利用字段的屬性名自動創(chuàng)建它,并將下劃線轉(zhuǎn)換為空格。

下面這個例子的verbose name是"person’s first name":

first_name = models.CharField("person's first name", max_length=30)

下面這個例子的verbose name是"first name":

first_name = models.CharField(max_length=30)

對于外鍵、多對多和一對一字字段,由于第一個參數(shù)需要用來指定關(guān)聯(lián)的模型,因此必須用關(guān)鍵字參數(shù)verbose_name來明確指定。如下:

poll = models.ForeignKey(    Poll,    on_delete=models.CASCADE,    verbose_name="the related poll",    )sites = models.ManyToManyField(Site, verbose_name="list of sites")    place = models.OneToOneField(    Place,    on_delete=models.CASCADE,    verbose_name="related place",)

另外,你無須大寫verbose_name的首字母,Django自動為你完成這一工作。

validators

運(yùn)行在該字段上的驗(yàn)證器的列表。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
django
Django的開發(fā)流程與數(shù)據(jù)庫設(shè)計(jì)
Django模型的Field Types總結(jié)
django開發(fā)之model篇-Field類型講解
python測試開發(fā)django-119.model_to_dict會漏掉DateTimeField字段
Django 開發(fā)內(nèi)容管理系統(tǒng)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服