Я использую POST-метод в Django, но мой request.method == 'POST' говорит, что это GET-метод.

Я не знаю, почему моя функция создания работала раньше, а теперь не работает. Я вижу только "It's not POST, it's GET". Я пытался удалить что-то, например: from def index(request): email = str(request.GET.get('autorization_email'))

and from def create(request)

type_values = Type.objects.all()
model_values = Model.objects.all()
equipment_values = Equipment.objects.all() 

Не помогло

url.py

urlpatterns = [
    path('', views.autorization, name='autorization'),
    path('home/', views.index, name='home'),
    path('return_equpment/', views.return_equpment, name='return_equpment'),
    path('create/', views.create, name='create'),
]

create.html

{% block content %}
  <form method="post" action="{% url 'create' %}">
    {% csrf_token %}
...
    <button type="submit" class="btn btn-success">Save</button><br>
    <span>{{ error }}</span><br>
  </form>
{% endblock%}

views.py

from django.shortcuts import render, redirect
from .models import Booking, Type, Model, Equipment
from .forms import BookingForm


error = ''
email = ''


def index(request):
    global email
    global error

    email = str(request.GET.get('autorization_email'))

    context = {
        'title': 'Main page',
        'error': error,
        'index_email': email
    }

    return render(request, 'main/index.html', context)

def create(request):
    type_values = Type.objects.all()
    model_values = Model.objects.all()
    equipment_values = Equipment.objects.all()
    form2 = BookingForm()
    global error
    global email

    context = {
        'form': form2,
        'error': error,
        'type_values': type_values,
        'model_values': model_values,
        'equipment_values': equipment_values,
        'create_email': email
    }

    if request.method == 'POST':
        form2 = BookingForm(request.POST)
        form2.email = email
        form2.type = request.POST.get('type')
        form2.model = request.POST.get('model')
        form2.number = request.POST.get('number')
        if form2.is_valid():
            form2.save()
            return redirect('autorization')
        else:
            error = 'Form incorrect'
    else:
        error = 'It's not POST, it's '+request.method
    return render(request, 'main/create.html', context)

Я не уверен, но думаю

if request.method == 'POST':

Должен быть в первой из функций

def create(request):
    if request.method == 'POST':

Потому что Django по умолчанию делает функцию как get запрос, и вы делаете некоторые операции перед тем, как определить тип запроса

from django.shortcuts import render, redirect
from .models import Booking, Type, Model, Equipment
from .forms import BookingForm


error = ''
email = ''


def index(request):
    global email
    global error

    email = str(request.GET.get('autorization_email'))

    context = {
        'title': 'Main page',
        'error': error,
        'index_email': email
    }

    return render(request, 'main/index.html', context)

def create(request):

  if request.method == 'POST':
        form2 = BookingForm(request.POST)
        form2.email = email
        form2.type = request.POST.get('type')
        form2.model = request.POST.get('model')
        form2.number = request.POST.get('number')
        if form2.is_valid():
            form2.save()
            return redirect('autorization')
        else:
            error = 'Form incorrect'
    else:
         type_values = Type.objects.all()
         model_values = Model.objects.all()
         equipment_values = Equipment.objects.all()
         form2 = BookingForm()
         global error
         global email

         context = {
            'form': form2,
             'error': error,
             'type_values': type_values,
             'model_values': model_values,
             'equipment_values': equipment_values,
             'create_email': email
          }
        error = 'It's not POST, it's '+request.method
    return render(request, 'main/create.html', context)
   

    
Вернуться на верх