2012-05-25 51 views
0

下列哪結構將是可取的:M2M關係還是2 FKs?

# M2M 
class UserProfile(models.Model): 
    ... 
    groups = models.ManyToManyField(Group) 

class Group(models.Model): 
    ... 

或 -

# 2 FKs 
class UserProfile(models.Model): 
    ... 

class Group(models.Models): 
    ... 

class GroupMember(models.Model): 
    user = models.ForeignKey(UserProfile) 
    group = models.ForeignKey(Group) 

這將是更好?

回答

1

您也可以使用through選項

groups = models.ManyToManyField(Group, through='GroupMember') 

你是什麼意思better結合這2種型號?通常你不需要創建中間模型(除非你需要存儲extra data)。

ManyToManyField完美地完成了他的工作,所以不要自己編寫它的功能。

1

兩者基本相同。當你做一個M2M Django自動創建一箇中間模型,這幾乎是正如像你的GroupMember模型。但是,它還設置了一些API掛鉤,允許您直接從UserProfile模型訪問Group模型,而不必混淆中間模型。

您可以像@ San4ez解釋的那樣使用through添加相同的鉤子,但是您只會使事情更加複雜。創建自定義through模型只有在您需要爲關係添加其他字段時纔有用。否則,堅持默認。

長和短,#1更好,只是因爲它與#2完全一樣,但更簡單,沒有無關的代碼。