django中的一對(duì)一,一對(duì)多,多對(duì)多
http://www.cnblogs.com/pythonxiaohu/p/5814247.html
http://luozhaoyu.iteye.com/blog/1510635
http://www.cnblogs.com/yaabb163/p/6357313.html (詳細(xì))
一對(duì)多或者多對(duì)一
這種關(guān)系可以使用外鍵來解決。
Django的表的多對(duì)多關(guān)系
class UserGroup(models.Model):
name = models.CharField(max_length=32)
Class UserInfo(models.Model):
username = model.CharField(max_length=16)
u2g = models.ManyToManyField(UserGroup)
一對(duì)多的時(shí)候,查詢一對(duì)應(yīng)的多,創(chuàng)建等可以通過 xxx_set
models.py:
class Album(models.Model):
artist = models.CharField(max_length=16)
album_title = models.CharField(max_length=8)
album_logo = models.CharField(max_length=512)
def __str__(self):
return self.album_title
def __unicode__(self):
return self.album_title
class Song(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE) # 這個(gè)是級(jí)聯(lián),刪除的時(shí)候有用
name = models.CharField(max_length="16")
=====
views.py:
# 查詢
album.song_set.all() # 查出此album的所有關(guān)聯(lián)的song
<QuerySet [<Song: Song object>]>
# 創(chuàng)建
album.song_set.create(name="xxx") # album這個(gè)外鍵可以不填寫,因?yàn)槭谴藙?chuàng)建的
注意:song的實(shí)例得到之后,song.album (也就是通過外鍵屬性,得到的是一個(gè)外鍵Model的一個(gè)對(duì)象)
song.album
<Album: Red>
注意:也可以在template中直接使用_set,就不必在views中去查xxx_set了。
個(gè)數(shù):
album.song_set.count() # 得到多少個(gè)
經(jīng)驗(yàn)
1.一對(duì)多或者多對(duì)一,都是在多那里做外鍵:
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
一個(gè)出版社可以出多本書。在書的類中添加外鍵。
2.思考是否是多對(duì)多
一本書有多個(gè)作者,那么一個(gè)作者可以寫多本書。