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 id field from your Model class.
Django will insert an AutoField called id automatically if you don't specify a primary key, so you don't need it.
Because you have specifically said that your id field is an integer primary key, Django is expecting you to manage it yourself. It's an IntField, as you declared, not an AutoField, so it is not automatically assigned any value.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With