我正在尝试创建一个具有一些社交网络功能的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__']
但似乎没有任何与连接相关的事情。我错过了什么,或者有更好的方法吗?
答案 0 :(得分:1)
您通过声明related_name
属性来覆盖反向访问者:您需要使用它们。
然而,你真正想要的是一个指向“自我”的ManyToManyField。 - 将其称为connections
,然后您可以完全删除Connection类,并使用self.connections.all()
替换现有的属性。