I was missing this from schema: ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
Now everything is happy. Thank you! On 5/28/11 8:32 AM, "Naoko Reeves" <[email protected]> wrote: > Malcolm, Thank you for your advice! > I changed my model as follows: > poll_key = models.AutoField(primary_key=True, db_column='poll_key') > However, the result remain the same as shown below. If you could point me out > to right direction again, I would appreciate. Thank you very much for your > time. > >>>> from mysite.polls.models import Poll2 >>>> p3 = Poll2(poll2_question='3') >>>> p3.save() >>>> p3.pk > 4L >>>> from mysite.polls.models import Poll >>>> p5 = Poll(poll_question='5') >>>> p5.save() >>>> print p5.pk > None > > > On 5/28/11 12:23 AM, "Malcolm Box" <[email protected]> wrote: > >> You need to tell django what the db column name for your pollkey field is. >> Look at the dbname field option in the docs. >> >> >> Sent from my iPhone, please excuse any typos >> >> On 28 May 2011, at 05:13, Naoko Reeves <[email protected]> wrote: >> >>> I see if column is set to AutoField then Django won't send INSERT poll_key >>> as null. >>> Now my problem is that it doesn't return newly assigned primary key value >>> for me if primary key name is _key instead of _id >>> It looks as if sequence name is not understood correctly. >>> Could you tell me if >>> 1) I need to change sequence name to something else? Currently it is >>> poll_key_seq >>> 2) Is there a way to specify the sequence name? >>> >>> >>> class Poll(models.Model): >>> poll_key = models.AutoField(primary_key=True) >>> poll_question = models.CharField(max_length=200, default='') >>> >>> class Poll2(models.Model): >>> poll2_id = models.AutoField(primary_key=True) >>> poll2_question = models.CharField(max_length=200, default='') >>> >>>>>> from mysite.polls.models import Poll2 >>>>>> p3 = Poll2(poll2_question='3') >>>>>> p3.save() >>>>>> p3.pk >>> 2L >>>>>> p4 = Poll2(poll2_question='4') >>>>>> p4.save() >>>>>> p4.pk >>> 3L >>>>>> from mysite.polls.models import Poll >>>>>> p5 = Poll(poll_question='5') >>>>>> p5.save() >>>>>> print p5.pk >>> None >>> >>> >>> On 5/27/11 5:31 PM, "Casey Greene" <[email protected]> wrote: >>> >>>> 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 [email protected]. >>>>> To unsubscribe from this group, send email to >>>>> [email protected]. >>>>> 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 [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]. >>> 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 [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

