Greetings,

I've been wrestling with a very strange set of errors in Django 1.1.1  
using psycopg2 as the back end, and DATABASE_OPTIONS "autocommit":  
True feature.

I was looking for the right combination of options and decorators such  
that Django would not automatically wrap view functions in BEGIN/ 
COMMIT blocks in the database, unless such were coded in.  However,  
this rapidly went down a strange path:

In my application (attached below; it's simple), the *first time* I  
access /createorder, it fails with a ProgrammingError.  Looking at the  
log from the database, the programming error is caused by Django  
issuing an INSERT without a RETURNING clause, where it expects the  
RETURNING clause to be there (to get the id of the newly-created  
object).  The *second* time I run it, it works correctly.  This is  
true even if I precompile the application, so it's not a compilation  
issue.

Further, when accessing /showorders/(order number), it sometimes  
issues the BEGIN/ROLLBACK to the database server, and sometimes does  
not, and I cannot for the life of me understand why it varies.

This is running these through the development server.

Any thoughts?  Anything obviously broken?

--

The application is "example", in project "djangotrans":

---- settings.py

No transaction middleware, and added:

DATABASE_OPTIONS = {
     "autocommit": True,
}

---- urls.py

from django.conf.urls.defaults import *

urlpatterns = patterns('djangotrans.example.views',
     (r'^createorder/$', 'create_order'),
     (r'^showorder/(?P<order_id>\d+)$', 'show_order'),

)

---- example/views.py:

from django.http import HttpResponse
from djangotrans.example.models import Order, Address
from django.db import transaction


@transaction.commit_on_success
def create_order(request):
     address = Address(street_address="1112 E Broad St",  
city="Westfield NJ", state="CA", zip="07090")
     address.save()

     order = Order(customer_name="Gomez Addams",  
shipping_address=address)
     order.save()

     return HttpResponse("Created: " + unicode(order))


def show_order(request, order_id):
     order = Order.objects.get(pk=order_id)

     return HttpResponse(unicode(order))


---- example/models.py

from django.db import models

class Address(models.Model):
     street_address = models.CharField(max_length=80)
     city = models.CharField(max_length=80)
     state = models.CharField(max_length=2)
     zip = models.CharField(max_length=5)

     def __unicode__(self):
         return self.street_address + " " + self.city + " " +  
self.state + " " + self.zip

class Order(models.Model):
     customer_name = models.CharField(max_length=80)
     shipping_address = models.ForeignKey(Address)

     def __unicode__(self):
         return "Order " + unicode(self.id) + " going to " + \
             self.customer_name + ", " + unicode(self.shipping_address)

--
-- Christophe Pettus
    x...@thebuild.com


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@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