django中的用户连接

时间:2015-01-07 20:38:07

标签: django django-models

我正在尝试创建一个具有一些社交网络功能的django网站。用户应该能够彼此连接。我创建的模型如下所示:

class Jumper(models.Model):
    ...
    @property
    def connections(self):
        jumpers = []
        for connection in self.connection_set.all():
            if connection.jumper_1.id == self.id:
                jumpers += connection.jumper_2
            else:
                jumpers += connection.jumper_1

        return jumpers


class Connection(models.Model):
    """
    A connection between two jumpers
    """

    # the jumpers to connect
    jumper_1 = models.ForeignKey(Jumper, related_name='connection_jumper_1')
    jumper_2 = models.ForeignKey(Jumper, related_name='connection_jumper_2')

    # confirmed, yes or no
    confirmed = models.BooleanField(default=False)

这不起作用,因为Jumper.connection_set未定义。我试着打印出这些字段:

>>> print([i for i in self.__dir__() if '_set' in i])
['jump_set', '_set_pk_val', 'equipment_set', '__setattr__']

但似乎没有任何与连接相关的事情。我错过了什么,或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您通过声明related_name属性来覆盖反向访问者:您需要使用它们。

然而,你真正想要的是一个指向“自我”的ManyToManyField。 - 将其称为connections,然后您可以完全删除Connection类,并使用self.connections.all()替换现有的属性。