【问题标题】:Checking if ForeignKeys are equal to one another检查 ForeignKeys 是否彼此相等
【发布时间】:2011-09-08 22:21:01
【问题描述】:

我有一个[(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) 是否存在,并且当我在插入之前打印时显示没有这样的元组。那么如何避免插入这样的元组,因为在我插入之前它们甚至不存在于列表中?

【问题讨论】:

  • 在conn_1、conn_2两边加上括号
  • 在哪里?在 for 语句中?所以它是for (conn_1, conn_2) in connections:

标签: python mysql django foreign-keys


【解决方案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 字段)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 2018-08-31
    • 2015-10-12
    相关资源
    最近更新 更多