Данные не сохраняются в базе данных с формами Django - PullRequest
1 голос
/ 20 октября 2019

Я работаю над приложением django, которое содержит форму. Я определил модель и сделал миграции. Но данные не сохраняются в базе данных. И URL-адрес приложения портится, когда я использую отправку формы.

Пока это мой код

models.py

class modelPost(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField(max_length=70)
    phone = models.CharField(max_length=12)

    def publish(self):
        self.save()

    def __str__(self):
        return self.name

forms.py

from .models import modelPost

class testForm(forms.ModelForm):

    class Meta:
        model = modelPost
        fields = ('name', 'email', 'phone')

views.py

from .forms import testForm

# Create your views here.
def index(request):
    if request.method == "POST":
        testForm = testForm(request.POST)

        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            return redirect('home')

    else:
        testForm = testForm()
        return render(request, 'index.html', {'testForm': testForm})

index.html

<form>
    {% csrf_token %}
    {{ testForm.name|as_crispy_field }}
    {{ testForm.email|as_crispy_field }}
    {{ testForm.phone|as_crispy_field }}
    <input type="submit" value="check" class="save btn submit_button">
</form>

, когда я пытаюсь отправить форму, это происходит с URL

http://127.0.0.1:8000/?csrfmiddlewaretoken=BG2i7fSbwG1d1cOlLWcEzy5ZQgsNYzMrhDJRarXkR3JyhetpWvqNV48ExY7xM9EW&name=randomPerson&email=test%40test.com&phone=12345678

Вот некоторые ссылки, которые я проверил, но ответы не работают

link1

link2

Ответы [ 2 ]

3 голосов
/ 20 октября 2019

Вы не сделали запрос POST, вы должны указать method="post" в теге <form>:

<form <b>method="post"</b>>
    {% csrf_token %}
    {{ testForm.name|as_crispy_field }}
    {{ testForm.email|as_crispy_field }}
    {{ testForm.phone|as_crispy_field }}
    <input type="submit" value="check" class="save btn submit_button">
</form>

По умолчанию метод GET. Вы можете увидеть это, поскольку данные передаются в строке запроса URL. Таким образом, это означает, что проверка request.method == 'POST' завершится неудачей, и поэтому действительно не сохранит данные в базе данных.

1 голос
/ 20 октября 2019

Вам нужно указать метод в теге формы, method = "post", и вам нужно указать путь или URL в теге формы, куда вы хотите перейти после нажатия кнопки подтверждения или отправки.

<form method="post" acton="Enter the path or url here">
    {% csrf_token %}
    {{ testForm.name|as_crispy_field }}
    {{ testForm.email|as_crispy_field }}
    {{ testForm.phone|as_crispy_field }}
    <input type="submit" value="check" class="save btn submit_button">
</form>

Также попробуйте передать запрос в параметрах формы, таких как testform (request, data = request.POST), он должен работать.

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