模型是寫一個數據庫驅動的web的第一步,也就是數據庫結構設計和附加的其它元數據
也就是說你的models.py決定了你數據庫的長相。
下面時自己在完成todolist項目時用的一部分models,在這裏記一下,以備後查
定義的方法爲:
from django.db import models
#用戶信息表
class UserInfo(models.Model):
name = models.CharField(max_length=255,verbose_name='姓名')
Phone = models.BooleanField(default=False,verbose_name='聯繫方式')
gender = models.CharField(max_length=6,choices=(('male',''男),('female','女')),default='female',verbose_name='性別')
class Meta:
verbose_name = '用戶信息'
verbose_name_plural = verbose_name #指定模型的複數形式是什麼,如果不指定Django會自動在模型名稱後加一個’s’
#每一位用戶的todo列表
class UserTodo(models.Model):
todo = models.CharField(max_length,verbose_name='todo信息')
user = model.ForeignKey(UserInfo,ondelete=models.CASCADE)
created_time = model.DateTimeField(default=datetime.now(),verbose_name='創建時間')
class Meta:
verbose_name='todo表'
verbose_name_plural = verbose_name
查官方文檔
Field的選項有:
- null :用法model.**Field(null=True(False)),如果是True,Django則會在數據庫中存儲空的值,默認爲False;
- blank:用法model.**Field(blank=True(False)),如果是True,Django則會在數據庫中存儲內容爲空的值(注意與null的區別,null是在數據庫的角度),默認爲False;
- choices:用法model.**Field(choices=(('male','男'),('female','女'))),choices的對象應爲可迭代的,例如列表或者元組。故名思意,如果給出choices,則會在表單中給出選項可以進行選擇;
- default:用法model.**Field(default=***),給這個filed設置默認值,當callable,則每創建一個新的對象,這個default就會被調用一次
- verbose_name:用法model.**Field(verbose='人類可讀的數據庫的列名')
- ......
Field的類model.**Field(一直糾結的地方):
- AutoField:若指定數據庫則會自動根據可用ID創建一個InterField 的自增的對象,一般不需要指定;
- BigAutoField:與AutoField一樣,不過數字範圍更大,從1到9223372036854775807;
BigIntegerField:與IntegerField 類似,用來存儲整型數據,不過也是範圍更大,從-9223372036854775808到9223372036854775807;
- BinaryField:存儲原始二進制數據的字段,只接受字節的指定
- BooleanField:多用在CheckboxInput中,存儲True或False,若接受null 可以用NullBooleanField
- CharField:用來存儲字符串,大小字符串兼收不誤,若想要存儲十分大量的文本,可以用TextField;CharField默認匹配的表單組件是TextInput;注意它有一個特殊的參數:max_length 用來限定存儲字符的最長長度,在存儲時,Django和數據庫都會進行驗證長度是否滿足要求。
- DateField:用來存儲日期,額外的參數有:auto_now,auto_now_add
- DateTimeField:用來存儲日期和時間,額外的參數有:auto_now,auto_now_add