检查ForeignKeys是否彼此相等

时间:2011-06-05 22:20:53

标签: python mysql django foreign-keys

我有一个[(3,2),(2,3)]形式的外键元组列表。我想将这些项插入到模型中的ManyToMany表中:

class Place(models.Model):
    data=models.IntegerField()
    connected_to=models.ManyToManyField('self')

class PlaceMeta(models.Model):
    place=models.ForeignKey("places.Place")

我正在插入列表(连接):

places=Place.objects.all()

for conn_1, conn_2 in connections:
        for place in places:
            if place.data == conn_1 and conn_1 != conn_2:
                place.connected_to.add(conn_1, conn_2)
            elif place.data == conn_2 and conn_1 != conn_2:
                fixture.connected_to.add(conn_2, conn_1)

当我打印列表时,它打印[(3L, 2L),(2L, 3L)](例如)但插入表后显示(2,2),(3,2),(2,3)和(3,3) )已被插入。

我已尝试在代码中的多个点检查是否存在元组(a,a),并且在插入之前打印时它显示没有这样的元组。那么我如何避免插入这样的元组,因为它们在我插入之前甚至看起来都不存在?

1 个答案:

答案 0 :(得分:1)

调用add()时,您有一个参数太多。它应该是这样的:

if place.data == conn_1 and conn_1 != conn_2:
    # place is the Place instance described by conn_1.
    # Let's connect it to conn_2!
    place.connected_to.add(conn_2)

您无需遍历所有地方,而是使用objects.getobjects.filter,具体取决于data是否唯一。例如,如果它是唯一的,请使用:

for source, target in connections:
   Place.objects.get(data=source).connected_to.add(Place.objects.get(data=target))

(可能会将unique=True属性添加到data字段)