模型朋友表在Django

时间:2015-06-06 13:19:01

标签: python django django-models

我正在尝试在Django中为Contacts表编写一个模型(比如在手机上)。

我的第一个想法是创建具有字段(名称,电话,电子邮件,年龄,creation_date ...)的类Person,并创建将具有两个字段(person1,person2)的类Contact。这意味着person1在联系人列表中有person2,但反之亦然。

但是,现在我读了一些关于Django的内容,我看到我应该更好地扩展User模型:

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

然后我不确定我是否应该有Contact课程,按照我的计划将有2个人,或者我应该向Person类添加一个字段,如下所示:

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

您如何看待哪种方法更好/更正确?

谢谢!

1 个答案:

答案 0 :(得分:1)

ManyToMany字段的方法看起来很好。如果您要创建另一个模型来手动保存,则需要添加逻辑以避免重复(也可能是其他事情)。

此外,对于ManyToMany,您最终会有拥有联系人的用户......例如,您可以这样做:

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

使用其他方法,您需要从Contact模型运行查询:

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

这并不复杂,但第一个对这种情况更有意义。