Просмотрите форму перед отправкой в ​​django - PullRequest
0 голосов
/ 26 мая 2020

Я создаю регистрационную форму. Я хочу, чтобы пользователи просматривали свои заполненные формы, чтобы подтвердить свои заявки. Но в моем коде форма отправляется дважды (перезаписывается, а не дублируется). Один раз, когда они нажимают кнопку отправки после заполнения формы и перезаписываются после нажатия кнопки отправки на странице обзора. В результате, если они закрывают браузер на странице обзора, их страница все равно отправляется, чего я не хочу разрешать.

views.py

from django.shortcuts import render, redirect
from .models import *
from .forms import *
# Create your views here.
def index(request):
    form = RegisterForm()
    print('hi')
    if request.method == 'POST':
        form = RegisterForm(request.POST, request.FILES)
        if form.is_valid():
            z = form.cleaned_data
            if (Register.objects.filter(email=z['email']).exists()):
                print('already exist')
                return redirect('/')
            else:
                print('xx')
                return redirect('preview', pk=z.get('id'))
    context = {'form':form}
    return render(request, 'event/index.html', context)

def preview(request, pk):
    prev = Register.objects.get(id=pk)
    if request.method == 'POST':
        prev.save()
        print('overwrite')
        return redirect('/')
    print('yy')
    context = { 'prev':prev,'id':pk}
    return render(request, 'event/preview.html', context)

index. html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Event Registration</title>
    <link rel="stylesheet" href="{% static 'css/style.css' %}">
    <script src="{% static 'js/script.js' %}"></script>
</head>
<body>
    <div class="mobile-screen">
        <div class="header">
        </div>

        <div class="logo"></div>

        <form id="login-form" method="POST" action="" enctype="multipart/form-data">
            {% csrf_token %}
                {{form.name}}
                {{form.email}}
                <input class="btn btn-sm btn-primary" type="submit" value="Register" name="Register">
        </form>

      </div>
</body>
</html>

models.py

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

# Create your models here.
class Register(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField(max_length=254,null=True)

    def __str__(self):
        return self.name
...