request.method =='POST'在Django中不起作用

时间:2017-08-22 05:51:17

标签: python django forms post

我在模板中创建了一个表单,用于在数据库中插入数据,但表单不起作用。当我提交表单时没有任何反应。请查看我的所有代码,并给我一些建议。

add.html模板文件:

        <h2>Add Article</h2>
        <form action="" method="post">
        {% csrf_token %}
            <label>Title</label>
              <input type="text" name="title" 
              placeholder="Enter Title">
             <label>Category</label>
                <select name="cate">
                    <option value="">Select Category</option>
                        {% for cat in get %}
                            <option value="{{ cat.cate }}">{{ cat.cate }}
                          </option>
                        {% endfor %}
                    </option>
                </select>
            <label>Discription</label>
                <textarea name="desc" rows="15">
               </textarea> 
              <input type="submit" value="submit" class="btn btn-default">
         </form>

我创建了2个视图。在第一个视图中,我渲染了所有类别,其中添加了表单选择菜单,第二个视图用于处理表单

views.py

from django.shortcuts import render, redirect
from .models import article, category

def get_category(request):
get = category.objects.all()
context = {
    'get':get
}
return render(request, 'blog/add.html', context)

def add(request):
  if request.method == 'POST':
    title = request.POST['title']
    cate = request.POST['cat']
    desc = request.POST['desc']
    art = article(title=title, disc=desc, cat=cate)
    art.save()

    return redirect('blog/index.html')
else:
    return render(request, 'blog/add.html')

Models.py

from django.db import models

class category(models.Model):
   cate = models.CharField(max_length=100)

def __str__(self):
    return self.cate

class article(models.Model):
   title = models.CharField(max_length=250)
   disc = models.TextField()
   cat = models.ForeignKey(category, verbose_name="Category")
   posted = models.DateTimeField(auto_now_add=True, editable=False)
   updated = models.DateTimeField(auto_now=True)

  def __str__(self):
      return self.title

urls.py

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

app_name = 'blog'

urlpatterns = [
   url(r'^$', views.index, name='index'),
   url(r'^add/$', views.get_category, name='category'),
   url(r'^add/$', views.add, name='add'),
 ]

4 个答案:

答案 0 :(得分:1)

在你的情况下,每次动作都会转到get_category,因为django会找到第一个匹配的网址并将其用于操作。

您可以为您的案例创建一个功能: 在views.py

urlpatterns = [
   url(r'^$', views.index, name='index'),
   url(r'^add/$', views.get_category, name='category'),
   # !! comment or remove last urls
   # url(r'^add/$', views.add, name='add'),
 ]
在urls.py中

 ng build --prod --output-hashing none

我进行了编辑,但如果您使用django forms查看和重建逻辑,那就更好了。

答案 1 :(得分:1)

<input type="submit" class="btn btn-primary" value="Add item"> 添加一个Submit按钮而不是type ='button'

答案 2 :(得分:0)

如果POST方法不起作用,请重新配置项目(进行迁移和迁移)

答案 3 :(得分:0)

更改:

return redirect('blog/index.html')

收件人:

return redirect('index')

“索引”是views.py文件中视图函数的名称属性。