Django Queryset方法.delete()不起作用

时间:2014-08-05 13:47:12

标签: python django postgresql transactions tastypie

更正:我说删除根本不起作用。那是错的。对于相同的对象/记录,它大部分时间都有效。它只是不稳定:尽管没有任何错误,但数以千计的电话中有几百个不会被删除。

所以,这将是一个非常奇怪的问题,看看这个案例:

if 'locations' in bundle.data:
    bundle.obj.locations.all().delete()
    for i, loc in enumerate(bundle.data['locations'], start=1):
        loc['order'] = i
        bundle.obj.locations.create(**loc)

第二行不起作用。没有错误,根本没有删除。然后我尝试了这个:

if 'locations' in bundle.data:
    cursor.execute("DELETE FROM bookings_bookinglocation WHERE booking_id='%s'" % bundle.obj.pk)
    connection.commit()
    for i, loc in enumerate(bundle.data['locations'], start=1):
        # ...

上述方法效果更好,但仍然经常忽略删除。

我知道这是无视的,因为在我的许多测试中,我有足够的注意力来检查.delete()调用之前和之后的ID,它们是相同的,如下所示:

if 'locations' in bundle.data:
    ids_before = bundle.obj.locations.values("id")
    bundle.obj.locations.all().delete()
    ids_after = bundle.obj.locations.values("id")
    # ...

配置:

  • Django 1.6.5(也尝试过1.6.1)
  • Postgres 9.3
  • ATOMIC_REQUESTS 为True
  • 这是在 django-tastypie 的ModelResource中的保存方法中运行的。
  • 我尝试使用 @ transaction.non_atomic_requests
  • 当我调用.delete()
  • 时,既不依赖于该表也不显示错误
  • 它没有延迟交易结束时的删除。我已经检查了

有什么想法吗?谢谢!

0 个答案:

没有答案