2016-03-22 4 views
1

У меня есть UserProfile модель, которая расширяет модель пользователя:Список контактов для пользователя

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    avatar = models.CharField(max_length=40, default='0') 
    activation_key = models.CharField(max_length=40, blank=True) 
    key_expires = models.DateTimeField(default=django.utils.timezone.now) 

Я хочу, чтобы каждый пользователь должен иметь список контактов. Контакт является объектом модели User. Я хочу составить список контактов, например, в Skype или в социальной сети. я попытался сделать в так:

class UserContact(models.Model): 
    user = models.ForeignKey(User, related_name='contacts') 
    username = models.CharField(max_length=40, blank=True) 

Но я думаю, что-то не так. Потому что, если я выберу все из модели UserContact, я получаю весь список имен пользователей без идентификаторов пользователей от модели User.

ответ

2

Вы должны указать номер Many-To-Many relationships.

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    avatar = models.CharField(max_length=40, default='0') 
    activation_key = models.CharField(max_length=40, blank=True) 
    key_expires = models.DateTimeField(default=django.utils.timezone.now) 
    contacts = models.ManyToManyField(User) 
+0

В этом случае у меня есть данные, как это: '{ 'ID': '5', 'имя пользователя': 'someuser', ..., 'аватар': 'someavatar', 'контакты': {'id': '5', 'username': 'someuser', ...}} '. Это избыточность или нет? Есть ли способ включить только поле «имя пользователя» в этом отношении ManyToMany? – Gooman

+0

Я не понимаю, что вы имеете в виду. То, что хорошо? И определите, что вы ожидаете от «быть хорошим». –

+0

Если мы используем отношения «многие ко многим», каждый пользователь имеет каждое поле модели «Пользователь» в поле «Контакты». Я хочу сделать так, чтобы в этом отношении пользователь имел только поле «имя пользователя». – Gooman