NoReverseMatch в / main / insert_num / Django - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь создать веб-приложение django, которое имеет форму, которая просит пользователя ввести номер телефона и сохраняет этот номер в базе данных postgres. Следующий код дает мне ошибку:

NoReverseMatch в / main / insert_num /

Обратный для '' не найден. '' не является допустимой функцией представления или именем шаблона.

И я не могу понять, в чем проблема, может кто-то помочь?

index. html

<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Test Form 1</title>
</head>
<body>
  <form action="{% url 'insert_my_num' %}" method="post" autocomplete="off">
    {% csrf_token %}
    <!-- {{ form.as_p }} -->
    <input type="submit" value="Send message">
  </form>
</body>
</html>

forms.py

from django import forms
from phone_field import PhoneField
from main.models import Post

class HomeForm(forms.ModelForm):
    phone = PhoneField()

    class Meta:
        model = Post
        fields = ('phone',)

models.py

from django.db import models
from phone_field import PhoneField


class Post(models.Model):
    phone = PhoneField()

main / urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('insert_num/', views.insert_my_num,name='insert_my_num')
]

project / urls.py

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('main/',include('main.urls'))
]

views.py

def insert_my_num(request: HttpRequest):
    phone = Post(request.POST.get('phone'))
    phone.save()
    return redirect('')

1 Ответ

1 голос
/ 21 апреля 2020

Ваш views.py немного не похож - вы нигде не отображаете свою форму. Я разработал быстрое приложение (которое, я думаю, делает то, что вы ищете) - дайте мне знать, если это работает:

main / templates / index. html

Здесь я просто установил действие формы на "" (это все, что вам нужно здесь) и раскомментировал строку form.as_p

<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Test Form 1</title>
</head>
<body>
  <form action="" method="post" autocomplete="off">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Send message">
  </form>
</body>
</html>

main / views.py

Обратите внимание на различия здесь: мы проверяем тип запроса и предпринимаем соответствующие действия в зависимости от того, какой тип запроса поступает. Если это запрос POST, мы обрабатываем данные формы и сохраняем их в базе данных. Если нет, нам нужно отобразить пустую форму, чтобы пользователь мог ее заполнить.

from django.shortcuts import render, redirect
from .forms import HomeForm


def insert_my_num(request):
    # Check if this is a POST request
    if request.method == 'POST':
        # Create an instance of HomeForm and populate with the request data
        form = HomeForm(request.POST)
        # Check if it is valid
        if form.is_valid():
            # Process the form data - here we're just saving to the database
            form.save()
            # Redirect back to the same view (normally you'd redirect to a success page or something)
            return redirect('insert_my_num')
    # If this isn't a POST request, create a blank form
    else:
        form = HomeForm()

    # Render the form
    return render(request, 'index.html', {'form': form})

Дайте мне знать, если это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...