数据插入错误:带有基数10的int()的文字无效

Ter*_*nce 1 python django google-app-engine django-nonrel

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

int()的基数为10的文字无效

这是我的代码:

views.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})
Run Code Online (Sandbox Code Playgroud)

models.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)
Run Code Online (Sandbox Code Playgroud)

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 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
Run Code Online (Sandbox Code Playgroud)

编辑:这是回溯

回溯:在get_response 107中输入文件"/home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/django/core/handlers/base.py".response = callback(request,*callback_args,**callback_kwargs)

在_wrapped_view中输入文件"/home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/django/contrib/auth/decorators.py"25.返回view_func(request,*args,**kwargs)

在say_something中输入文件"/home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/core/views.py"36. say.save()

保存452中的文件"/home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/django/db/models/base.py"self.save_base(using = using,force_insert = force_insert,force_update = force_update )

在save_base 550中输入文件"/home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/django/db/models/base.py".对于meta.local_fields中的f]

文件"/home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/django/db/models/fields/subclassing.py"在内部28.返回功能(*args,**kwargs)

文件"/home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/django/db/models/fields/subclassing.py"在内部28.返回功能(*args,**kwargs)

在get_db_prep_save 280中输入文件"/ home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/django/db/models/fields/init .py".返回self.get_db_prep_value(value,connection = connection,prepared =假)

文件"/home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/django/db/models/fields/subclassing.py"在内部53. return func(*args,**kwargs)

在get_db_prep_value 492中输入文件"/ home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/django/db/models/fields/init .py"return return.ops.value_to_db_auto(value)

在value_to_db_auto中输入文件"/home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/djangotoolbox/db/base.py"68.return super(NonrelDatabaseOperations,self).value_to_db_auto(value)

在value_to_db_auto 485中输入文件"/ home/eeyorexd/workspace/Python/appengine/something-to-say/somethingtosay/django/db/backends/init .py".return int(value)

异常类型:ValueError at/contrib/Exception Value:int()的无效文字,基数为10:'test'

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

Dan*_*man 5

问题出在这里:

saying = Saying(content, category, added_date, added_user)
Run Code Online (Sandbox Code Playgroud)

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

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

saying = Saying(content=content, 
                category=category, 
                added_date=added_date, 
                added_user=added_user)
Run Code Online (Sandbox Code Playgroud)