Django 中的模型朋友 table

Model friends table in Django

我正在尝试在 Django 中为联系人 table(就像在手机上 phone)编写一个模型。

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

但是,现在我阅读了更多关于 Django 的内容,我发现我应该像这样扩展用户模型:

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

然后我不确定我是否应该按照我的计划让联系人 class 有 2 个人,或者我应该向 Person class 添加一个字段,如下所示:

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

你怎么看,哪种方法更好/更正确?

谢谢!

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

并没有那么复杂,但是第一个对于这种情况确实更有意义。