views:

136

answers:

2

I'm going crazy today. I just tried to insert a new record and it threw back a "post_blogpost.id may not be NULL" error. Here's my model:

class BlogPost(models.Model):
    title   = models.CharField(max_length=100)
    slug    = models.SlugField(max_length=100)
    who     = models.ForeignKey(User, default=1)
    when    = models.DateTimeField()

    intro   = models.TextField(blank=True, null=True)
    content = models.TextField(blank=True, null=True)

    counter = models.PositiveIntegerField(default=0)

    published = models.BooleanField(default=False)
    css = models.TextField(blank=True, null=True)

    class Meta:
        ordering = ('-when', 'id')

There are a number of functions beneath the model too but I won't include them in full here. Their names are: content_cache_key, clear_cache, __unicode__, reads, read, processed_content.

I'm adding through the admin... And I'm running out of hair.

+1  A: 

The only thing I can think of is that the table schema has become desynchronized from the model in that someone removed the AUTOINCREMENT attribute from the PK of the table.

Ignacio Vazquez-Abrams
I've got to say, given that this is an error happening outside of my code it's entirely possible but how do I check if that's the case and how would I go about fixing it?
Oli
You would use your database tool to examine the properties of the table, and you would execute an `ALTER TABLE` query to re-add the constraint. See the relevant DB documentation for details.
Ignacio Vazquez-Abrams
I went with a somewhat riskier manage.py method: `dumpdata post > post.json`, `reset post`, `loaddata post.json`.. Still checking to make sure it hasn't nuked anything.
Oli
+1  A: 

I've also experienced odd editing results in the admin. Usually they were related to foreign keys. When the edit page has a bunch of empty model instances on one page so that you can easily create new ones by filling them out, sometimes I managed to do something wrong such that an attempt would be made to save the empty instances. Maybe that applies for you.

You could verify that this adds fine by itself in a shell.

$ python manage.py shell
>>> from models import *
>>> b = BlogPost(title='Hello', slug='hello')
>>> b.save()
Alexander Ljungberg
Same error from the shell =(
Oli