【问题标题】:invalid literal for int() with base 10: when trying to save an object基数为 10 的 int() 的无效文字:尝试保存对象时
【发布时间】:2015-01-26 16:01:30
【问题描述】:

我知道这里有很多具有相同标题和错误的帖子。我尽可能多地经历了,但发布的代码与我的并不相似。所以我不得不问。

我正在尝试将“游戏”对象保存到数据库中。相关源文件贴在下面:

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")),

最后,我的错误:

/addgame/ 处的ValueError 基数为 10 的 int() 的无效文字:'NFS'

错误回溯:

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'

谁能建议我应该如何更改 Games 对象的保存方式?提前致谢!!

【问题讨论】:

  • 我的猜测是在developer = request.POST['developer'] 附近。看起来您要从 Web 前端获取某种字符串,并且它需要一个 id。
  • POST 数据中developer 的值将是主键。 Game 模型期望 developer 是 Developer 模型的实例,而不是整数。

标签: python django


【解决方案1】:

您确实应该为此使用 ModelForm,这将使一切变得更加容易。

也就是说,您可以通过为开发人员获取实际的 User 对象来修复您的代码:

developer = User.objects.get(username=request.POST['developer'])

但如果您使用了 ModelForm,则不需要这样做。此外,您还将获得这样的优势,即您的用户的条目将真正得到验证,而不是在数据丢失时崩溃,这就是现在发生的情况。

【讨论】:

  • 另外,@user3033194 您的视图代码确实过时了。我不确定你是否在学习某种教程,但如果你是,它已经过时了大约 6 年。
  • 其实我这里也有一个疑问——如果我使用ModelForm,会在表单中显示“开发者”字段和可输入字段吗?
  • 如果你愿意。默认情况下,它将是所有用户的下拉列表,但如果您愿意,您可以将其配置为可编辑,尽管您随后需要添加一些类似的逻辑来查找实际用户。
  • 还要注意Games(name,category,url,developer,price)。您应该使用命名参数:Game(name=name, category=category, ...)
  • 这是一个吹毛求疵,但我觉得使用模型名称的单数形式可以使可读性更容易,例如UserTypeGameUsertypesGames...games = Games.objects.all 对我来说感觉很奇怪。
猜你喜欢
  • 2016-11-10
  • 1970-01-01
  • 2013-05-31
  • 2018-03-13
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
相关资源
最近更新 更多