brilliant, you are correct:

Foreign-key constraints:
    "traffic_tracking2010_content_type_id_fkey" FOREIGN KEY
(content_type_id) REFERENCES django_content_type(id) DEFERRABLE
INITIALLY DEFERRED
    "traffic_tracking2010_src_content_type_id_fkey" FOREIGN KEY
(src_content_type_id) REFERENCES django_content_type(id) DEFERRABLE
INITIALLY DEFERRED
    "traffic_tracking2010_user_id_fkey" FOREIGN KEY (user_id)
REFERENCES auth_user(id) DEFERRABLE INITIALLY DEFERRED

I wouldn't want to change that anyway.

Now what I still don't get is:

    # doesn't protect against foreign key errors anyway ??
    try:
        sid = transaction.savepoint()
        tracking.save()
        transaction.savepoint_commit(sid)
    except Exception,e:
        get_logger().exception("tracking save: %s (%s)" % (src,e))
        transaction.savepoint_rollback(sid)

why that attempt to commit just that save doesn't raise.

I really don't want to have to check for existence of User and
ContentType

thanks again.


as for why django didn't catch it:

http://code.djangoproject.com/ticket/12909




On Jun 13, 11:30 pm, akaariai <akaar...@gmail.com> wrote:
> > Can anybody figure out why the IntegrityError doesn't get thrown till
> > then ?
> > Why didn't Django catch errors thrown in middleware ?
>
> Most likely the foreign keys are defined as "deferrable initially
> deferred", meaning that the database doesn't check them before commit.
> And this of course means that Django can't catch the error before
> commit.
>
> From the error message it seems like you are using Postgres, you can
> check if this is the case by running manage.py dbshell and then type
> "\d traffic_tracking2010". From the output you should see the
> deferrable initially deferred on the foreign key. You could manually
> disable the deferred behavior, but I don't know what this breaks.
> Probably something, as there must be some reason for Django using
> deferred checking.
>
> --
> Anssi

-- 
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