Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对象列表的django模型&x27;彼此的关系?_Python_Django_Design Patterns - Fatal编程技术网

Python 对象列表的django模型&x27;彼此的关系?

Python 对象列表的django模型&x27;彼此的关系?,python,django,design-patterns,Python,Django,Design Patterns,我有一个社会团体的目标 在每个社交团体对象中,我都有一个朋友对象列表 每个friend对象都有一个relationship对象(充满了有趣的事实,比如他们相遇的时候) 我被困在这里了。我如何正确地定义我的模型,以便我可以查询任何朋友对象来调出他们的共享关系对象 我不认为这是简单地用a解决的,因为我处理的是一个庞大且不断增长的好友对象列表(在链接到解决方案中,他们创建了两个不同的模型,例如friend_a和friend_b) 我目前的方法是让Relationship对象看起来像下面发布的内容。我必

我有一个社会团体的目标

在每个社交团体对象中,我都有一个朋友对象列表

每个friend对象都有一个relationship对象(充满了有趣的事实,比如他们相遇的时候)

我被困在这里了。我如何正确地定义我的模型,以便我可以查询任何朋友对象来调出他们的共享关系对象

我不认为这是简单地用a解决的,因为我处理的是一个庞大且不断增长的好友对象列表(在链接到解决方案中,他们创建了两个不同的模型,例如friend_a和friend_b)

我目前的方法是让Relationship对象看起来像下面发布的内容。我必须在代码中添加逻辑,以防止重复的关系对象。。。但是这个

 class Relationship(models.Model):
     social_clique = models.ForeignKey( Social_Clique )
     friend_0 = models.ManyToManyField( Friend, related_name='friend_0' )
     friend_1 = models.ManyToManyField( Friend, related_name='friend_1' )

我感觉我错过了谷歌搜索这个问题的ORM设计模式的正确关键字。关于此问题的正确描述或如何解决此问题的任何建议?

如果
friend\x
字段中的任何一个都是多个字段,则没有意义。朋友之间的关系是多对多的,但
关系
本身就是多对多关系中的中介模型(因此得名)。因此,friend_uu字段应该是foreignkey,然后使用关系作为
模型,另外定义一个从friend到friend的多个字段:

class Relationship(models.Model):
    social_clique = models.ForeignKey(Social_Clique)
    friend_0 = models.ForeignKey(Friend, related_name='friend_0')
    friend_1 = models.ForeignKey(Friend, related_name='friend_1')

class Friend(models.Model):
    ... other fields ...
    friends = models.ManyToManyField('Friend', through=Relationship)
现在很容易从两个朋友(
me
myu-friend
)变成他们的共同关系:

Relationship.objects.get(friend_0=me, friend_1=my_friend)

等等,你仍然可以得到我所有的朋友:

me.friends.all()

Relationship.objects.get(friend\u 0=me,friend\u 1=my\u friend)
中,args的顺序表明我必须获得关系的正确顺序。我如何知道将参数放在哪个顺序以获得一个关系btwn任意friend_x和friend_y?选择一种策略,比如按朋友名字的字母顺序排列。。。好问题。问题是递归多对多关系与直通表。在建立友谊时,您可以通过自动创建两个
关系
实例来解决这个问题,每个方向一个。是的,除了它是一个共享关系之外——只是一对情侣之间的关系。我想我会使用朋友的可订购密钥(alpha或dates)来恢复正确的关系并创建正确的关系。
me.friends.all()