Django外键关系

时间:2014-05-03 17:46:21

标签: django models foreign-key-relationship

我正在尝试在两个表,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

我想做的是:

  1. 获得注册用户:

    ru = Registered_Users.objects.get(id=1)
    
  2. 从User_Connection获取此注册用户的连接:

    uc = User_Connections.objects.filter(user_connection=ru)
    
  3. 现在我如何显示用户连接'来自User_Connection的电子邮件ID和来自Registered_Users的每个用户连接的first_name。

    让我知道是否有更好的方法来实现这一目标。

    注意:用户连接'电子邮件ID也将出现在Registered_Users中,因为必须注册所有电子邮件ID。

    感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

实现友谊的最佳方式是在Django中使用ManyToManyField

您可以在此处详细了解:https://docs.djangoproject.com/en/1.6/ref/models/fields/#ref-manytomany

另外,为了解决您对查询的疑惑,请使用' uc'你可以做的变量:

uc.email 电子邮件ID 名字uc.user_connection.first_name

您可以在此处阅读有关Django查询和对象的更多信息:https://docs.djangoproject.com/en/1.6/topics/db/queries/