2015-06-06 5 views
0

Я пытаюсь написать модель для таблицы контактов (например, на мобильном телефоне) в Django.Таблица друзей друзей в Django

Моя первая идея состояла в том, чтобы создать класс Person, который будет иметь поля (имя, телефон, адрес электронной почты, возраст, создание_данных ...) и создать контакт класса, который будет иметь два поля (person1, person2). Это означает, что у человека 1 есть человек2 в списке контактов, но не наоборот.

Но теперь я прочитал еще о 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 выглядит достаточно хорошо. Если вы должны были создать еще одну модель для этого вручную, вам нужно будет добавить логику, чтобы избежать дублирования (может быть, и других вещей).

Кроме того, с 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

Смежные вопросы