我正在尝试在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)
您如何看待哪种方法更好/更正确?
谢谢!
答案 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
这并不复杂,但第一个对这种情况更有意义。