another newbie question,
Right after I save an item to database, I tried to access
its primary key to redirect its page. But I could not get it done.
I tried manually handling the transaction as it explains in this document.
Could that be because of using admin mode?
I get this error :
invalid literal for int() with base 10: 'None'
I changed the line of return to this to convert id to string
return HttpResponseRedirect("/blog/page/"+str(page.id)+"/")
here is the code segment.
@transaction.commit_manually
def new_post_save(request):
.
.
.
page.save()
sid = transaction.savepoint()
transaction.savepoint_commit(sid)
return HttpResponseRedirect("/blog/page/"+page.id+"/")
here is the rest of the original view and the model
def new_post_save(request):
page_name = request.POST["page_name"]
content = request.POST["content"]
postCategory = request.POST["cat"]
page = BlogPost(title = page_name,body = content, author = request.user, category = postCategory)
page.save()
return HttpResponseRedirect("/blog/page/"+page.id+"/")
the model
class BlogPost(models.Model):
id = models.IntegerField(primary_key=True)
author = models.ForeignKey(User)
title = models.CharField(max_length=128)
body = models.TextField()
category = models.CharField(max_length=10, default='other')
def __unicode__(self):
return self.title
here base.py I guess I did not override the save function.
def save(self, force_insert=False, force_update=False, using=None):
"""
Saves the current instance. Override this in a subclass if you want to
control the saving process.
The 'force_insert' and 'force_update' parameters can be used to insist
that the "save" must be an SQL insert or update (or equivalent for
non-SQL backends), respectively. Normally, they should not be set.
"""
if force_insert and force_update:
raise ValueError("Cannot force both insert and updating in model saving.")
self.save_base(using=using, force_insert=force_insert, force_update=force_update)
save.alters_data = True
in settings.py by database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'blog.db',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
Remove the
idfield from your Model class.Django will insert an AutoField called
idautomatically if you don’t specify a primary key, so you don’t need it.Because you have specifically said that your
idfield is an integer primary key, Django is expecting you to manage it yourself. It’s anIntField, as you declared, not anAutoField, so it is not automatically assigned any value.