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)

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com