Reputation: 1821
I know there are plenty of posts here with the same title and error. I went through as many as I could, but the codes posted are not really similar to mine. Hence I am forced to ask.
I am trying to save a "Games" object to the database. The relevant source files are posted below:
models.py
from django.contrib.auth.models import User
from django.db import models
class Usertypes(models.Model):
user = models.OneToOneField(User)
usertype = models.TextField()
def __unicode__(self):
return self.user_name
class Games(models.Model):
name = models.CharField(max_length=100,unique=True)
category = models.CharField(max_length=100)
url = models.URLField()
developer = models.OneToOneField(User)
price = models.FloatField()
def __unicode__(self):
return self.name
views.py:
def addgame(request):
c={}
c.update(csrf(request))
saved = False
if request.method == 'POST':
name = request.POST['name']
#print(name)
category = request.POST['category']
#print(category)
url = request.POST['url']
#print(url)
developer = request.POST['developer']
#print(developer)
price = request.POST['price']
#print(price)
game = Games(name,category,url,developer,price)
game.save()
saved = True
return render_to_response('gamestore/developer_homepage.html',{'saved':saved},context_instance=RequestContext(request))
urls.py:
from django.conf.urls import patterns, include, url
from django.contrib import admin
import gamestore.views
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'wsdProject.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^$','gamestore.views.home'),
url(r'^login/','gamestore.views.login_view'),
url(r'^logout/','gamestore.views.logout_view'),
url(r'^registration/','gamestore.views.registration'),
url(r'^addgame/','gamestore.views.addgame'),
url(r'^gamestore/', include('gamestore.urls', namespace="gamestore")),
Finally, my error:
ValueError at /addgame/ invalid literal for int() with base 10: 'NFS'
The error traceback:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/addgame/
Django Version: 1.7.1
Python Version: 3.2.3
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'gamestore')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/core/handlers/base.py" in get_response 111.response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/mukhera3/Desktop/game_store/wsdProject/gamestore/views.py" in addgame 137.game.save()
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/base.py" in save 591.force_update=force_update,update_fields=update_fields)
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/base.py" in save_base 619.updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/base.py" in _save_table 681.forced_update)
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/base.py" in _do_update 711.filtered = base_qs.filter(pk=pk_val)
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/query.py" in filter 691.return self._filter_or_exclude(False, *args, **kwargs)
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db models/query.py" in _filter_or_exclude 709.clone.query.add_q(Q(*args, **kwargs))
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/sql/query.py" in add_q 1287. clause, require_inner = self._add_q(where_part, self.used_aliases)
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/sql/query.py" in _add_q 1314. current_negated=current_negated, connector=connector)
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/sql/query.py" in build_filter 1186.condition = self.build_lookup(lookups, col, value)
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/sql/query.py" in build_lookup 1094. return final_lookup(lhs, rhs)
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/lookups.py" in __init__82.self.rhs = self.get_prep_lookup()
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/lookups.py" in get_prep_lookup 85.return self.lhs.output_field.get_prep_lookup(self.lookup_name, self.rhs)
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/fields/__init__.py" in get_prep_lookup 646.return self.get_prep_value(value)
File "/home/mukhera3/djangoenv/lib/python3.2/site-packages/django/db/models/fields/__init__.py" in get_prep_value 915.return int(value)
Exception Type: ValueError at /addgame/
Exception Value: invalid literal for int() with base 10: 'NFS'
Can anyone suggest how I should change the way the Games object is getting saved? Thanks in advance!!
Upvotes: 1
Views: 1298
Reputation: 599490
You really should be using a ModelForm for this, which will make everything much easier.
That said, you can fix your code by getting the actual User object for the developer:
developer = User.objects.get(username=request.POST['developer'])
but if you used a ModelForm, you wouldn't need to do this. Plus you'll have the advantage that your users' entries will actually be validated, rather than crashing when data is missing which is what will happen now.
Upvotes: 2