Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

django - does not save to database immediately

Tags:

python

django

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': '',                    
    }
}
like image 561
cirik Avatar asked Jun 28 '26 13:06

cirik


1 Answers

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.

like image 109
Ian Clelland Avatar answered Jun 30 '26 02:06

Ian Clelland



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!