Résolue

Problème de soumission de formulaire

# Django # HTML # Formulaires

Bonjour, j'avais un formulaire en HTML stylisé avec du CSS que j'ai voulu transformer en formulaire lié django pour pouvoir recevoir les données envoyées par les utilisateurs dans ma table Contact. Sauf que ça ne fonctionne pas le formulaire s'affiche correctement mais il n'envoie rien quand j'appuie sur Envoyer, mon formulaire se trouve dans la page home et j'utilise wagtail que j'ai intégré à mon projet django pour permettre à des editeurs de modifier certaines parties du site. Tout ce que j'énonce ci dessous est fait dans mon application home qui concerne la page d'accueil et les chemins sont bien renseignés.

Voici mon form.py :

from django import forms
from .models import Contact

class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = ['name', 'email', 'phone_number', 'reason', 'description', 'sex']
        widgets = {
            'name': forms.TextInput(attrs={'placeholder': 'Saisissez votre nom et prénom', 'class': 'box', 'maxlength': '50'}),
            'email': forms.EmailInput(attrs={'placeholder': 'Saisissez votre adresse mail', 'class': 'box'}),
            'phone_number': forms.TextInput(attrs={'placeholder': 'Saisissez votre numéro de téléphone', 'class': 'box'}),
            'reason': forms.TextInput(attrs={'class': 'box'}),
            'description': forms.Textarea(attrs={'class': 'box'}),
            'sex': forms.Select(attrs={'class': 'box'}),
        }

voici mon modèle :

class Contact(models.Model):
    name = models.CharField(max_length=255)  
    email = models.EmailField()
    phone_number = models.CharField(max_length=15)  
    reason = models.CharField(max_length=255)  
    description = models.TextField()
    sex = models.CharField(max_length=10, choices=[('homme','Homme'), ('femme','Femme')])

Voici ma vue ( ça m'affiche ' pas bon' dans la console ) :

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            print(form.cleaned_data)
            form.save()
    else:
        print("pas bon")
        form = ContactForm()

    return render(request, 'pages/home/home.html', {'form': form})

Et voici mon fichier url :

urlpatterns = [
    path('django-admin/', admin.site.urls),
    path('admin/', include("wagtail.admin.urls")),
    path('', contact_view, name='contact'),
    path('documents/', include("wagtail.documents.urls")),
    path("", include('wagtail.urls')),

]

Et ça c'est mon template home.html :

<section class="contact" id="contact">
<h1 class="heading"><span>contactez</span> nous</h1>
<div class="row">
<div class="image">
<img alt="" src="{% static 'images/contact-us.png' %}"/>
</div>
<form action="{% url 'contact' %}" method="POST">

          {% csrf_token %}
          <span>Nom et prénom</span>
          {{ form.name }}
          <span>Adresse mail</span>
          {{ form.email }}
          <span>Numéro de téléphone</span>
          {{ form.phone_number }}
          <span>Motif de la demande</span>
          {{ form.reason }}

<input class="btn" type="submit" value="Envoyer"/>
</form>
</div>
</section>

Remplace ton print("pas bon") par un print(form.errors) et donne-nous l'output, ça aidera davantage.

Eh bien, tu as répondu à ma question indiréctement ! Mon soucis est que j'avais des champs obligatoires dans mon modèle et forms.py où y'avait pas de blank = True et que je ne les avaient pas mentionné dans le template HTML, ce qui fait que le formulaire n'etait pas valide. Merci !

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.