python - Data insertion error: invalid literal for int() with base 10 -
i'm using django-nonrel on google app engine. i'm trying add row database error when trying use save():
invalid literal int() base 10
here's code:
views.py
from django import forms django.contrib.auth.decorators import login_required django.contrib.auth.forms import usercreationform django.http import httpresponseredirect django.shortcuts import render_to_response forms import sayform models import saying, category import datetime def say_something(request): if request.method == 'post': form = sayform(request.post) if form.is_valid(): cd = form.cleaned_data content = cd['content'] category_temp = "uncategorized" category = category.objects.get(name = category_temp) added_date = datetime.datetime.now() added_user = request.user saying = saying(content, category, added_date, added_user) saying.save() return httpresponseredirect('/contribute/success') else: form = sayform() return render_to_response('say_form.html', {'form' : form})
models.py
from django.db import models django.contrib.auth.models import user class category(models.model): name = models.charfield(max_length = 50) def __unicode__(self): return self.name class saying(models.model): content = models.charfield(max_length = 160) category = models.foreignkey(category) added_date = models.datefield() added_user = models.foreignkey(user)
forms.py
from django import forms class sayform(forms.form): content = forms.charfield(widget = forms.textarea) def clean_message(self): content = self.cleaned_data['content'] num_characters = len(content) if num_characters > 160: raise forms.validationerror("please limit saying 160 characters only.") num_words = len(content.split()) if num_words < 4: raise forms.validationerror("this doesn't make sense. longer.") return content
edit: here's backtrace
traceback: file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/django/core/handlers/base.py" in get_response 107. response = callback(request, *callback_args, **callback_kwargs)
file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/django/contrib/auth/decorators.py" in _wrapped_view 25. return view_func(request, *args, **kwargs)
file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/core/views.py" in say_something 36. saying.save()
file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/django/db/models/base.py" in save 452. self.save_base(using=using, force_insert=force_insert, force_update=force_update)
file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/django/db/models/base.py" in save_base 550. f in meta.local_fields]
file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/django/db/models/fields/subclassing.py" in inner 28. return func(*args, **kwargs)
file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/django/db/models/fields/subclassing.py" in inner 28. return func(*args, **kwargs)
file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/django/db/models/fields/init.py" in get_db_prep_save 280. return self.get_db_prep_value(value, connection=connection, prepared=false)
file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/django/db/models/fields/subclassing.py" in inner 53. return func(*args, **kwargs)
file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/django/db/models/fields/init.py" in get_db_prep_value 492. return connection.ops.value_to_db_auto(value)
file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/djangotoolbox/db/base.py" in value_to_db_auto 68. return super(nonreldatabaseoperations, self).value_to_db_auto(value)
file "/home/eeyorexd/workspace/python/appengine/something-to-say/somethingtosay/django/db/backends/init.py" in value_to_db_auto 485. return int(value)
exception type: valueerror @ /contribute/ exception value: invalid literal int() base 10: 'test'
my gut feeling tells me problem lies somewhere around how save object database. maybe foreign key part? can't pinpoint problem since started learning django recently. problem have django-nonrel using gae's backend? can tell me went wrong here?
the problem here:
saying = saying(content, category, added_date, added_user)
you've forgotten django adds automatic id
field model definition. if did in shell, printed saying.__dict__
, see content has been assigned id
, category content
, , on.
instead, use keyword arguments when instantiating model:
saying = saying(content=content, category=category, added_date=added_date, added_user=added_user)
Comments
Post a Comment