On Mon, 2009-02-02 at 22:22 -0800, Theme Park Photo, LLC wrote: > I can't get anything with Foreign keys to work. I trimmed everything > down to the simplest example: > > from django.db import models > from django.contrib.auth.models import User > > class Ranking(models.Model): > user = models.ForeignKey(User) > score = models.IntegerField() > def __unicode__(self): > return u'%s %d' % (self.user, self.score) > > I can't add any "Ranking" records. I try like this (from the django > shell) and always get an error like this: > IntegrityError: (1048, "Column 'user_id' cannot be null") > > Can someone give me a hint as to the right way to do this? > > (Django shell session below) > > >>> from django.db import models > >>> from django.contrib.auth.models import User > >>> from djbaytzim.bayscore.models import Ranking > >>> u = User (username="swirsky") > >>> print type(u) > <class 'django.contrib.auth.models.User'>
You have to save the User object before you can use it anywhere. At this point in time, it doesn't have a primary key value, which is what the Ranking object needs to refer to it. Actually, the pk value is None, which 'r' then uses, which causes problems later. Another way of thinking of this: right now, 'u' does not exist in the database. So you cannot save 'r' to the database, since it needs to refer to another row in the database (the one for 'u', which doesn't exist) for the User object. Call u.save() here (or use User.objects.create(username="swirsky")) and everything will work. Regards, Malcolm --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---