Форма, связанная с моделью, не отправляется в базу данных

Я новичок в Python. Я сделал посадочную страницу, на которой есть форма с отправкой номера телефона, но она не попадает в базу данных. Форма связана с моделью

Models.py:

from django.db import models
from phonenumber_field.modelfields import PhoneNumberField


class CallOrder(models.Model):
    first_name = models.CharField(max_length=50, blank=True, verbose_name='First name')
    phone = PhoneNumberField(null=False, blank=False, unique=False, verbose_name='Phone')
    email_field = models.EmailField(blank=True, verbose_name='Email')
    message = models.TextField(max_length=400, blank=True, verbose_name='Comments')
    created_at = models.DateTimeField(auto_now=True, verbose_name='Created at')

    class Meta:
        verbose_name = 'Call order'
        verbose_name_plural = 'Call orders'

Views.py:

from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import CallOrderForm


def base(request):
    header_menu_button = {'': 'Home', 'qui_sommes_nous': 'Qui sommes nous', 'nos_services': 'Nos services', 'avis': 'Avis', 'contacts': 'Contacts', 'faq': 'FAQ', 'partenaires': 'Partenaires'}
    content_body = {'qui_sommes_nous': 'qui_sommes_nous_content', 'nos_services': 'nos_services_content', 'avis': 'avis_content', 'contacts': 'contacts_content', 'faq': 'faq_content', 'partenaires': 'partenaires_content'}
    form = CallOrderForm()
    return render(request=request, template_name='repair_service/base.html', context={'title': 'Mr.Ginzby', 'header_menu_button': header_menu_button, 'content_body': content_body, 'form': form})

def call_back(request):
    if request.method == 'POST':
        form = CallOrderForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/thanks/')
    else:
        form = CallOrderForm()
    return render(request, 'repair_service/base.html', {'form': form})

Html:

<form action="" method="post">
    {% csrf_token %}<br>
    {{ form.as_p }}
    <div class="d-grid gap-2"><input type="submit" value="Submit" class="btn btn-success"></div>
</form>

Django всегда использует маршрут текущей страницы, данные формы даже не попадают в представление call_back, один из способов решения проблемы - указать имя url в атрибуте формы action, чтобы данные попали в представление call_back, но у меня есть другой подход - сделать одно представление вместо двух, так:

views.py:

def base(request):
    context='' # for the error local variable `context` referenced before assignment.
    if request.method == 'POST':
        form = CallOrderForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/thanks/')
    else: # Get condition
        header_menu_button = {'': 'Home', 'qui_sommes_nous': 'Qui sommes nous', 'nos_services': 'Nos services', 'avis': 'Avis', 'contacts': 'Contacts', 'faq': 'FAQ', 'partenaires': 'Partenaires'}
        content_body = {'qui_sommes_nous': 'qui_sommes_nous_content', 'nos_services': 'nos_services_content', 'avis': 'avis_content', 'contacts': 'contacts_content', 'faq': 'faq_content', 'partenaires': 'partenaires_content'}
        form = CallOrderForm()
        context={'title': 'Mr.Ginzby', 'header_menu_button': header_menu_button, 'content_body': content_body, 'form': form}
        
    return render(request, 'repair_service/base.html', context)

Удалите этот call_back вид.

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