使用Django POST-Method键入错误

时间:2018-02-19 14:42:08

标签: python django python-3.x

我是Django的新手。我知道我们之前有过这个话题,但我在研究中找不到解决方案。

我只想用一个表格发布一个简单的待办事项,但出于某种原因,我得到了这个类型错误:“/ todo / add / expected string或type-like object 的TypeError”

希望你们能发现我的错误。

型号:

from django.db import models
from datetime import*
import time
from django.utils.timesince import timesince
from django.urls import*

class Task(models.Model):
    task_title = models.CharField(max_length=50)
    complete = models.BooleanField(default=False)

    def get_absolute_url(self):
        return reverse('todo:detail', kwargs={'pk':self.pk})

    def __str__(self):
        return self.task_title

表格:

from django import forms

class TodoForm(forms.Form):
    task_title = forms.CharField(max_length=50,
        widget=forms.TextInput(attrs{'class':'formcontrol','placeholder':                  'Enter todo e.g. Delete junk files', 'aria-label' : 'Todo',
                                      'aria-describedby' : 'add-btn'}))

视图:

@require_POST
def addTodo(request):
    form = TodoForm(request.POST)

    print(form.errors)
    print(request.POST['task_title'])
    if request.method == 'POST':
        if form.is_valid():
            new_todo = Task(task_title=request.POST['task_title'])
            new_todo.save()
            print('DONE')

    return redirect('index')

网址:

from django.conf.urls import url
from django.urls import path
from . import views


urlpatterns = [
    # match list,
    url(r'^$', views.index, name='index'),
    url(r'^add/$', views.addTodo, name='add'),

    # match id goes to detail view
    url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
]

模板:

<div class="sidebar">
    <form action="{% url 'add' %}" method="POST" role="form">
        {% csrf_token %}
        <div class="form-group">
            <div class="input-group">
                {{ form.errors }}
                {{ form.task_title }}
                <span class="input-group-btn">
                    <button type="submit" class="btn btn-default"id="add-btn">ADD</button>
                </span>
            </div>
        </div>
    </form>
</div>

追溯:

vironment:


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

Django Version: 2.0
Python Version: 3.6.4
Installed Applications:
['todo',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 '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:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\exception.py" in inner
  35.             response = get_response(request)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  128.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\views\decorators\http.py" in inner
  40.             return func(request, *args, **kwargs)

File "C:\Users\Maxim Perl\PycharmProjects\Sloth\todo\views.py" in addTodo
  49.             new_todo.save()

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py" in save
  729.                        force_update=force_update, update_fields=update_fields)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py" in save_base
  759.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py" in _save_table
  842.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\base.py" in _do_insert
  880.                                using=using, raw=raw)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\manager.py" in manager_method
  82.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\query.py" in _insert
  1125.         return query.get_compiler(using=using).execute_sql(return_id)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
  1279.             for sql, params in self.as_sql():

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\sql\compiler.py" in as_sql
  1232.                 for obj in self.query.objs

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\sql\compiler.py" in <listcomp>
  1232.                 for obj in self.query.objs

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\sql\compiler.py" in <listcomp>
  1231.                 [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\sql\compiler.py" in prepare_value
  1171.             value = field.get_db_prep_save(value, connection=self.connection)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\fields\__init__.py" in get_db_prep_save
  767.         return self.get_db_prep_value(value, connection=connection, prepared=False)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\fields\__init__.py" in get_db_prep_value
  2248.             value = self.get_prep_value(value)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_value
  2243.         return self.to_python(value)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\fields\__init__.py" in to_python
  2217.             parsed = parse_time(value)

File "C:\Users\Maxim Perl\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\utils\dateparse.py" in parse_time
  89.     match = time_re.match(value)

Exception Type: TypeError at /todo/add/
Exception Value: expected string or bytes-like object

0 个答案:

没有答案