創建表
書籍模型: 書籍有書名和出版日期,一本書可能會有多個作者,一個作者也可以寫多本書,所以作者和書籍的關系就是多對多的關聯關系(many-to-many);
一本書只應該由一個出版商出版,所以出版商和書籍是一對多關聯關系(one-to-many)。
創建一對一的關系:OneToOne("要綁定關系的表名")
創建一對多的關系:ForeignKey("要綁定關系的表名")
創建多對多的關系:ManyToMany("要綁定關系的表名") 會自動創建第三張表
class Book(models.Model): nid = models.AutoField(primary_key=True) # 自增id(可以不寫,默認會有自增id) title = models.CharField(max_length=32) publishDdata = models.DateField() # 出版日期 price = models.DecimalField(max_digits=5, decimal_places=2) # 一共5位,保留兩位小數 #一個出版社有多本書,關聯字段要寫在多的一方 # 不用命名為publish_id,因為django為我們自動就加上了_id publish = models.ForeignKey("Publish") #foreignkey(表名)建立的一對多關系 # publish是實例對象關聯的出版社對象 authorlist = models.ManyToManyField("Author") #建立的多對多的關系 def __str__(self): #__str__方法使用來吧對象轉換成字符串的,你返回啥內容就打印啥 return self.titleclass Publish(models.Model): #不寫id的時候數據庫會自動給你增加自增id name =models.CharField(max_length=32) addr = models.CharField(max_length=32) def __str__(self): return self.nameclass Author(models.Model): name = models.CharField(max_length=32) age = models.IntegerField()class AuthorDeital(models.Model): tel = models.IntegerField() addr = models.CharField(max_length=32) author = models.OneToOneField("Author") #建立的一對一的關系
注意:臨時添加的字段,首先你得考慮之前的數據有沒有。設置一個默認值。
wordNum = models.IntegerField(default=0)
通過logging可以查看翻譯成的sql語句
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, }}
注意事項:
1、 表的名稱myapp_modelName,是根據 模型中的元數據自動生成的,也可以覆寫為別的名稱
2、id 字段是自動添加的
3、對于外鍵字段,Django 會在字段名上添加"_id" 來創建數據庫中的列名
4、這個例子中的CREATE TABLE SQL 語句使用PostgreSQL 語法格式,要注意的是Django 會根據settings 中指定的數據庫類型來使用相應的SQL 語句。
5、定義好模型之后,你需要告訴Django _使用_這些模型。你要做的就是修改配置文件中的INSTALL_APPSZ中設置,在其中添加models.py所在應用的名稱。
新聞熱點
疑難解答