Опубликовать и сохранить переменную Django, не работает - PullRequest
0 голосов
/ 27 ноября 2018

Может кто-нибудь проверить, как мне правильно написать часть 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 голосов
/ 27 ноября 2018

Чтобы сохранить переменную, вы можете просто использовать сеансы

request.session['number'] = number

Затем вы можете использовать request.session ['number'], как и любую другую переменную

0 голосов
/ 27 ноября 2018
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', {})
...