Problem has been solved and it doesn't have connection to any bugs,
it was just programming error (there was shipment.save() somewhere
later
in python code)

On Mar 30, 10:21 am, naos <lukasz.korzyb...@gmail.com> wrote:
> Hi all,
>
> I have problem with foreign key contraint upon calling delete() on my
> model. Here's my problem:
>
> I have Order and Shipment model. Shipment has a foreign key to Order.
>
> class Order(...):
>    ...
>
> class Shipment()
>    order = m.ForeignKey('Order')
>    ...
> Now in one of my views I want do delete order object along with all
> related objects. So I invoke order.delete().
>
> I have Django 1.0.4, PostgreSQL 8.4 and I use transaction middleware,
> so whole request is enclosed in single transaction.
> The problem is that upon order.delete() I get:
>
> ...
> File "/usr/local/lib/python2.6/dist-packages/django/db/backends/
> __init__.py", line 28, in _commit
> return self.connection.commit()
>
> IntegrityError: update or delete on table "main_order" violates
> foreign key constraint "main_shipment_order_id_fkey" on table
> "main_shipment"
> DETAIL:  Key (id)=(45) is still referenced from table "main_shipment".
>
> I checked in connection.queries that proper queries are executed in
> proper order.
> First shipment is deleted, after that django executes delete on order
> row:
>
> {'time': '0.000', 'sql': 'DELETE FROM "main_shipment" WHERE "id" IN
> (17)'},
> {'time': '0.000', 'sql': 'DELETE FROM "main_order" WHERE "id" IN
> (45)'}
>
> Foreign key have ON DELETE NO ACTION (default) and is initially
> deferred. I don't know why I get foreign key constraint violation.
>
> I also tried to register pre_delete signal and manually delete
> shipment objects before delete on order is called, but it
> resulted in the same error. I can change ON DELETE behaviour for this
> key in Postgres but it would be just a hack,
> I wonder if anyone has a better idea what's going on here.
>
> There is also a small detail, my Order model inherits from Cart model,
> so it actually doesn't have id field but cart_ptr_id
> and after DELETE on order is executed there is also DELETE on cart,
> but it seems unrelated? to the shipment->order
> problem so I simplified it in the example.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to