Résolue

Erreur attribute class meta Formulaire

# Résolution d'erreurs # Django # Formulaires

Salut Docstring !
Je galère un peu avec les formulaires. J'ai un message d'erreur qui est pourtant clair mais je ne trouve pas la solution. Voici le contexte je creer un formulaire de contact. J'aimerai comme dans les vidéo de Thibault créer une class ModelForm pour pouvoir changer l'intitulé de mes Input avec la class Meta.
J'ai une erreur qui s'affiche que je comprends mais que je n'arrive pas à résoudre.

Voici l'erreur :
AttributeError: type object 'ContactForm' has no attribute '_meta'

Voici mon code :
J'ai créé une application "formulaire"
Fichier Models contient :

``` from django import forms
from django.core.validators import EmailValidator

class ContactForm(forms.Form):
lastname = forms.CharField(max_length=36)
firstname = forms.CharField(max_length=36)
email = forms.EmailField(validators=[EmailValidator()])
phone = forms.CharField(max_length=10)
message = forms.CharField(widget=forms.Textarea)
```

Fichier views.py celui qui est dans mon site ( pas dans une application)

``` from django.http import HttpResponse
from formulaire.models import ContactForm
from django.shortcuts import redirect, render
from ym.forms import SignupContact

def index(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
return redirect('index.html')

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

def signup_contact(request):
form = SignupContact()

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

def success(request):
return HttpResponse('success')
Mon fichier forms.py est placé dans mon site ( pas dans une application)
from django import forms
from formulaire.models import ContactForm

class SignupContact(forms.ModelForm):
class Meta:
model = ContactForm
fields = "all"
```

Le but est d'arrivé a changé les labels car on ne peu pas mettre d'accent de ponctuation dans les class.

Merci encore pour votre aide ^^

Salut !

Je pense que l'erreur vient du fait que tu essaies d'utiliser forms.ModelForm avec une classe qui n'est pas un modèle Django, mais plutôt un simple forms.Form.

En Django, forms.ModelForm s'attend à être associé avec un modèle Django (une classe qui hérite de django.db.models.Model), qui représente une table dans la base de données, alors que forms.Form s'utilise pour créer des formulaires sans être directement liés à un modèle spécifique.

Si tu veux changer les labels de tes champs de formulaire, tu peux directement le faire dans ta classe ContactForm en spécifiant un dictionnaire labels dans une classe Meta au sein de ta classe ContactForm. Voici comment ça pourrait se présenter :

Dans ton fichier models.py (ou tu peux renommer ce fichier en forms.py puisque tu ne définis pas de modèles de base de données ici):

from django import forms
from django.core.validators import EmailValidator

class ContactForm(forms.Form):
    lastname = forms.CharField(label='Nom de famille', max_length=36)
    firstname = forms.CharField(label='Prénom', max_length=36)
    email = forms.EmailField(label='E-mail', validators=[EmailValidator()])
    phone = forms.CharField(label='Téléphone', max_length=10)
    message = forms.CharField(label='Message', widget=forms.Textarea)

Et en faisant cela, tu peux définir tes propres intitulés pour les champs de ton formulaire de contact sans avoir à créer un modèle ou utiliser ModelForm. Garde à l'esprit que si plus tard tu souhaites sauvegarder les informations du formulaire dans une base de données, tu devras créer un modèle et utiliser ModelForm.

n'éhsites pas si ça ne répond pas ou ne résout pas ton problème.

Génial sa a fonctionné et permi de mieux rechercher dans la doc de django pour affiner mon formulaire avec les widgets !

Merci je cloture ^^

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.