Skip to main content
 首页 » 编程设计

python之数据插入错误 : invalid literal for int() with base 10

2025年05月04日17telwanggs

我在 Google App Engine 上使用 Django-nonrel。我正在尝试向数据库中添加一行,但在尝试使用 save() 时出现此错误:

invalid literal for int() with base 10

这是我的代码:

View .py

from django import forms 
from django.contrib.auth.decorators import login_required 
from django.contrib.auth.forms import UserCreationForm 
from django.http import HttpResponseRedirect 
from django.shortcuts import render_to_response 
from forms import SayForm 
from 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}) 

模型.py

from django.db import models 
from 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) 

表单.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 your saying to 160 characters only.") 
        num_words = len(content.split()) 
        if num_words < 4: 
            raise forms.ValidationError("This doesn't make sense. Say something longer.") 
        return content 

编辑:这是回溯

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. for 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 at /contribute/ Exception Value: invalid literal for int() with base 10: 'test'

我的直觉告诉我,问题在于我如何将对象保存到数据库。也许外键部分?由于我最近才开始学习 Django,所以我无法确定问题所在。这个问题与使用 GAE 后端的 Django-nonrel 有什么关系吗?谁能告诉我哪里出了问题?

请您参考如下方法:

问题出在这里:

saying = Saying(content, category, added_date, added_user) 

您忘记了 Django 会自动将 id 字段添加到模型定义中。如果您在 shell 中执行此操作,然后打印 saying.__dict__,您会看到内容已分配给 id,类别分配给 content 等等。

相反,在实例化模型时始终使用关键字参数:

saying = Saying(content=content,  
                category=category,  
                added_date=added_date,  
                added_user=added_user)