python - Django TypeError int() 参数必须是字符串或数字,而不是 'QueryDict'

标签 python html django post

在我的索引页面上单击提交时出现类型错误

int() argument must be a string or a number, not 'QueryDict'

我想传入用户和消息变量,这样当他们提交消息时,用户和消息都会保存在数据库中。目前,我没有看到我应该如何在我的 index.html 中使用传入的变量(用户和消息)来转发回该信息。

回溯

    Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/

Django Version: 1.6.1
Python Version: 2.7.2
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'SimpleMessage')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Josh\Documents\Message\SimpleMessage\SimpleMessage\views.py" in index
  56.       u.save()
File "C:\Python27\lib\site-packages\django\db\models\base.py" in save
  545.                        force_update=force_update, update_fields=update_fields)
File "C:\Python27\lib\site-packages\django\db\models\base.py" in save_base
  573.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "C:\Python27\lib\site-packages\django\db\models\base.py" in _save_table
  635.                                       forced_update)
File "C:\Python27\lib\site-packages\django\db\models\base.py" in _do_update
  665.         filtered = base_qs.filter(pk=pk_val)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in filter
  590.         return self._filter_or_exclude(False, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in _filter_or_exclude
  608.             clone.query.add_q(Q(*args, **kwargs))
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in add_q
  1198.         clause = self._add_q(where_part, used_aliases)
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in _add_q
  1232.                     current_negated=current_negated)
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in build_filter
  1125.         clause.add(constraint, AND)
File "C:\Python27\lib\site-packages\django\utils\tree.py" in add
  104.         data = self._prepare_data(data)
File "C:\Python27\lib\site-packages\django\db\models\sql\where.py" in _prepare_data
  79.             value = obj.prepare(lookup_type, value)
File "C:\Python27\lib\site-packages\django\db\models\sql\where.py" in prepare
  352.             return self.field.get_prep_lookup(lookup_type, value)
File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_lookup
  369.             return self.get_prep_value(value)
File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_value
  613.         return int(value)

Exception Type: TypeError at /
Exception Value: int() argument must be a string or a number, not 'QueryDict'

模型

class User (models.Model):
    name = models.CharField(max_length=20)

    def __unicode__(self):              
        return self.name

class Message (models.Model):
    content = models.TextField(max_length=140)
    user = models.ForeignKey(User)
    time = models.DateTimeField()

    def __unicode__(self):              
        return self.content

View .py

def index (request):
    if request.method == 'POST':
        u = User(request.POST)
        m = Message(request.POST)
        u.save()
        m.save()
        return render_to_response('index.html', {
                'user': u,
                'message': m,
                }, RequestContext(request))
    else:
        u = User()
        m = Message()
        return render_to_response('index.html', {
                'user': u,
                'message': m,
                }, RequestContext(request))

index.html

<form action="{% url 'index' %}" method = "post">
{% csrf_token %}
<input type="text" name="user" id="user" maxlength="20" placeholder = "Username">
<br>
<br>
<textarea rows="4" cols="35" name="text" maxlength="140" placeholder = "Message goes here"></textarea><br>
<input type="submit" value="Submit">
</form>

最佳答案

您直接将 POST 查询字典传递给模型的指令。

改变它:

u = User(request.POST)

收件人:

u = User(name=request.POST.get('user'))

还有,这个:

m = Message(request.POST)

收件人:

m = Message(content=request.POST.get('text'), user=u)

此外,如果你想自动添加消息时间,更改此行:

time = models.DateTimeField()

收件人:

time = models.DateTimeField(auto_now_add=True)

关于python - Django TypeError int() 参数必须是字符串或数字,而不是 'QueryDict',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21515264/

相关文章:

javascript - 如何通过 File API 执行 json 文件中的数据?

javascript - HTML - 折叠的导航菜单不显示菜单项

python - Django 表单在模型表单上无效

python - Django:自定义对象json序列化

python - Django ORM 可以有 strip 字段吗?

python - nfcpy - 检测 USB 串行连接的 PN532

python - Elasticsearch存在过滤器如何将空字符串设为空值?

python - Pandas:如何不使用复制/ View ?

python - Python 2.7 函数是否记住值而不是引用?关闭怪异

html - 如何实现长多行字符串的最后几个可见符号的淡入淡出?