2015-06-06 23 views
0

我正在嘗試在Django中爲聯繫人表(如手機)編寫模型。Django中的模型朋友表

我的第一個想法是創建將具有字段(名稱,電話,電子郵件,年齡,creation_date ...)的類Person,並創建將具有兩個字段(person1,person2)的Contact類。這意味着person1在聯繫人列表中有person2,但反之亦然。

但是,現在我閱讀一些有關Django的,我看到了,我應該更好地擴展用戶模型是這樣的:

class Person(models.Model): 
    user = models.OneToOneField(User) 

然後我不知道我應該有聯繫類,將有2人作爲我的計劃,還是應該多一個字段添加到Person類,像這樣:

class Person(models.Model): 
    user = models.OneToOneField(User) 
    contacts = models.ManyToManyField('self', related_name='contact_of', symmetrical=False) 

你怎麼看,哪種方法更好/更正確?

謝謝!

回答

1

ManyToMany字段的方法看起來不錯。如果您要創建另一個模型來手動進行此操作,則需要添加邏輯以避免重複(也許還有其他一些操作)。

此外,在多對多你最終有聯繫人的用戶...例如,你可以這樣做:

my_user.person.contacts.all() 
my_user.person.contacts.add(another_user) 
my_user.person.contacts.filter(phone='123456') 

隨着你需要運行從接觸模型查詢的另一種方法:

Contact.objects.filter(user_1=pk1, user_2=pk2) 
Contact.objects.create(user_1=pk1, user_2=pk2) # add logic or db constraints to prevent duplication 

這並不複雜,但第一個確實對這種情況更有意義。

+0

非常感謝您解釋這個! – bla0009