发布并保存Django变量,不起作用

时间:2018-11-26 22:36:40

标签: python django python-3.x django-templates django-views

有人可以检查我应该如何正确编写views.py部分吗?

如果我编码:

from django.shortcuts import render, redirect

def shifts_table(request):
    print(request.POST['value'])        
    return render(request, 'shifts_table.html', {})

...至少该页面可以运行,但是如果我不像下面这样编码,则知道为什么吗?

from django.shortcuts import render, redirect
from django.contrib import messages

def shifts_table(request):
    if request.method == 'POST':
        number = request.POST['value']
        if number.is_valid():
            number.save()   
            return redirect('shifts_table.html')
        else:
            messages.success(request, ('Seems Like There Was An Error...'))
            return render(request, 'home.html', {})
    else:       
        return render(request, 'shifts_table.html', {})

home.html:

<form action="{% url 'shifts_table' %}" method='POST'>
    {% csrf_token %}
    <label for='number'>Number:</label>
    <input type="number" name="value" placeholder="2020" required><br/>
    <button type="submit">submit</button>
</form>

urls.py:

urlpatterns = [
    path('', views.home, name='home'),
    path('shifts_table', views.shifts_table, name='shifts_table'),
]

2 个答案:

答案 0 :(得分:0)

number = request.POST['value']

这将返回一个字符串,并且字符串没有保存方法,因此它将不起作用

我认为您有一个由该数字引用的模型,并将其保存到数据库中,您可以执行以下操作

object= yourmodel.objects.get(pk=number)
object.save()

字符串也没有为is_valid()定义,该定义用在窗体中,窗体在您的视图中未实现

保存到数据库后,您必须重定向,只有在未提交任何内容的情况下,该操作才能完成

最终代码:

def shifts_table(request):
    if request.method == 'POST':
        number = request.POST['value']
        # check if number is valid (not empty and no spaces before or after)
        if not number.strip(): 
            object = yourmodel.objects.get(pk=number)
            object.save()
            return render(request, 'home.html', {})
        else:
            messages.success(request, ('Seems Like There Was An Error...'))
            return render(request, 'home.html', {})
    else:       
        return render(request, 'shifts_table.html', {})

答案 1 :(得分:0)

要保存变量,您只需使用会话即可

request.session['number'] = number

然后,您可以像其他任何变量一样使用request.session ['number']