Doesn't autofield with primary_key=True handle this for you (instead of making it an IntegerField):

https://docs.djangoproject.com/en/1.3/ref/models/fields/#autofield

Hope this helps!
Casey

On 05/27/2011 07:22 PM, Naoko Reeves wrote:
Hi, I have a Django newbie question.
My goal is to auto increment primary key with non Django standard column
name.
We are converting from existing database and primary key schema is
"tablename_key" and not "id".
I googled it and end up reaching to this ticket:
https://code.djangoproject.com/ticket/13295
So I understand that there is work in progress but I wanted find work
around..

1. My first try was to let postgres handle it.

my postgreSQL table looks like this:

CREATE TABLE poll
(
   poll_key integer NOT NULL DEFAULT nextval('poll_key_seq'::regclass),
   poll_question character varying(200) NOT NULL,
   poll_pub_date timestamp with time zone NOT NULL,
   CONSTRAINT poll_pkey PRIMARY KEY (poll_key)
)

My model look like this:
class Poll(models.Model):
     poll_key = models.IntegerField(primary_key=True)
     poll_question = models.CharField(max_length=200, default='')
     poll_pub_date = models.DateTimeField('date published',
default=datetime.date.today())
     class Meta:
         db_table = u'poll'

I was hoping that with this, I could
p = Poll(poll_question="Question 1?")
p.save()

but this fails because Django is actually sending the following statement:
INSERT INTO "poll" ("poll_key", "poll_question", "poll_pub_date")
VALUES (NULL, 'Question 1?', NULL)


2. My Second attempt is then to add default to model

Created a function to return sequence value
from django.db import connection
def c_get_next_key(seq_name):
""" return next value of sequence """
     c = connection.cursor()
     c.execute("SELECT nextval('%s')" % seq_name)
     row = c.fetchone()
     return int(row[0])

Calling like below works just fine. Everytime I call it, I get new number.
c_get_next_key('poll_key_seq')

Then I modify Poll_key in Poll model as follows:
Poll_key = models.IntegerField(primary_key=True,
default=c_get_next_key('poll_key_seq'))

I went to Django Shell and created first record.
p1 = Poll(poll_question="P1")
p1.poll_key
# this will return let's say 37
p1.save()
# saves just fine.

# instantiating new object
p2 = Poll(poll_question="P2")
p2.poll_key
# this also return 37.

I know I must be doing something wrong... but could you pint me to right
direction? I am expecting p2.poll_key to return 38.
Thank you very much for your help in advance.

Naoko





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

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