Django中的Model(表結構)


Model(表設計)

 

在這里只提經常用到的三種聯表結構:

  • 一對多:models.ForeignKey(其他表)
  • 多對多:models.ManyToManyField(其他表)
  • 一對一:models.OneToOneField(其他表)

 

 

一、聯表結構一對多

一對多:當一張表中創建一行數據時,有一個單選的下拉框(可以被重復選擇)
例如:創建用戶信息時候,需要選擇一個用戶類型【普通用戶】【金牌用戶】【鉑金用戶】等。

 

先來看django  models里面是怎么寫的:

 1 class Color(models.Model):  2 
 3     name = models.CharField(max_length=15)  4 
 5 
 6 class Someting(models.Model):  7 
 8     c1 = models.CharField(max_length=15)  9     c2 = models.CharField(max_length=15) 10     c3 = models.CharField(max_length=15) 11     c4 = models.CharField(max_length=15) 12     color = models.ForeignKey(Color) #設置外鍵為另一個類名 13 
14 
15 class Host(models.Model): 16     hostname = models.CharField(max_length=15) 17     business = models.ForeignKey('Business') #用引號的方式是避免外鍵的類在下面而導致的報錯 18 
19 
20 class Business(models.Model): 21     name = models.CharField(max_length=15)

 

 

在數據庫中的兩張表,可以看到設置外鍵的那列關聯到了另一張表上的id列:

color表

 

something表:

 

同樣也可以有選擇性的關聯另一張表中的數據:

參數:to_field=“”

 1 class Shoplist(models.Model):  2 
 3     name = models.CharField(max_length=15, null=True, unique=True) #必須要設置unique = True,(不能重復)  4     price = models.CharField(max_length=15)  5 
 6 
 7 class Shop(models.Model):  8 
 9     v1 = models.CharField(max_length=15) 10     v2 = models.CharField(max_length=15) 11     pr = models.ForeignKey(Shoplist, to_field='name')    

 

二、聯表結構多對多

 

一張圖詮釋了多對多的含義:

 

在django中的models里:

 1 class Group(models.Model):  2 
 3     groupname = models.CharField(max_length=15)  4 
 5 
 6 class User(models.Model):  7 
 8     name = models.CharField(max_length=15)  9     email = models.CharField(max_length=15) 10     phone = models.CharField(max_length=15) 11     group = models.ManyToManyField(Group)    #與表Group創建多對多的關聯

 

 

在這里我們不需要專門創建第三張關聯的表,django自動就為我們創建了第三張表:

 

三、聯表結構一對一

django中的一對一表結構可以理解為在多對多的基礎上建立的,只不過綁定的表對象里的數據只能出現一次:

由上圖理解,表A與表B建立了一對一的結構。(B建立了與A的一對一),那么表A中的數據在表B中只能出現一次。

 

在django的model里:

 1 class User2(models.Model):  2 
 3     name = models.CharField(max_length=15)  4     email = models.CharField(max_length=15)  5     phone = models.CharField(max_length=15)  6 
 7 
 8 class Group2(models.Model):  9 
10     groupname = models.CharField(max_length=15) 11     group = models.OneToOneField(User2)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM