Django Foreign Key Relations
Я пытаюсь установить связь между двумя таблицами Registered_Users и User_Connections, чтобы те, кто зарегистрированы, могли добавлять других в свой список подключений (больше похоже на добавление друзей). Ниже приводится содержимое файла models.py:
class Registered_Users(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField(unique=True)
password = models.CharField(max_length=10)
def __unicode__(self):
return self.email
class User_Connections(models.Model):
email = models.EmailField(blank=True)
connection_email = models.EmailField(blank=True)
user_connection = models.ForeignKey(Registered_Users, null=True)
def __unicode__(self):
return self.connection_email
То, что я пытаюсь сделать, это:
получить зарегистрированного пользователя:
ru = Registered_Users.objects.get(id=1)
получить подключения этого зарегистрированного пользователя от User_Connection:
uc = User_Connections.objects.filter(user_connection=ru)
Теперь, как я могу отобразить идентификатор электронной почты пользовательских подключений из User_Connection и first_name для каждого подключения пользователя из Registered_Users.
Дайте мне знать, если есть лучший способ добиться этого.
ПРИМЕЧАНИЕ: идентификатор электронной почты пользовательских подключений также будет присутствовать в Registered_Users, поскольку все идентификаторы электронной почты должны быть зарегистрированы.
Ценю любую помощь. Благодарю.
2 ответа
class RegisteredUser(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField(unique=True)
password = models.CharField(max_length=10)
connected_users = models.ManyToManyField('self', blank=True, symmetrical=False)
def __unicode__(self):
return self.email
API теперь выглядит так:
ru = RegisteredUser.objects.get(id=1)
another_user = RegisteredUser.objects.get(email='name@example.com')
ru.connected_users.add(another_user)
uc = ru.connected_users.all()
for user in uc:
print user.first_name, user.last_name, user.email
Лучший способ реализовать дружбу - это использовать ManyToManyField в Django:
Вы можете прочитать больше об этом здесь: https://docs.djangoproject.com/en/1.6/ref/models/fields/
Кроме того, чтобы устранить путаницу в запросе, с переменной 'uc' вы можете просто сделать:
uc.email
для идентификатора электронной почты и uc.user_connection.first_name
для имени.
Вы можете прочитать больше о Django Queries и объектах здесь: https://docs.djangoproject.com/en/1.6/topics/db/queries/