2017-10-05 2 views
0

Je ne reçois aucune donnée dans le formulaire. Il me manque évidemment quelque chose mais je ne sais pas quoi.API Formulaires Django - Formulaire de retour de formulaire

I'm following this documentation.

forms.py

class EventRegistrationForm(forms.Form): 
    tags = forms.TextInput() 

    class Meta: 
     model = Event 
     fields = [ 
      'name', 'description', 'type', 'map_pin', 'location_id', 'location_name', 'address1', 
      'address2', 'city', 'state', 'zip', 'country', 'admission_fee', 'free_admission', 'online_ticket_url', 
      'available_parking', 'nearby_transit', 'stream', 'kid_friendly', 'no_underage', 'website_url', 'opportunities' 
     ] 

views.py

def save_event(request): 
    if request.is_ajax() and request.method == "POST": 

     main_form_data = json.loads(request.POST.get('mainForm')) 
     print(main_form_data) 
     main_form = EventRegistrationForm(main_form_data) 
     if main_form.is_valid(): 
      print("Form is incorrectly returning as valid") 
      print(main_form.cleaned_data) 

sortie:

{'online_ticket_url': '', 'state': '', 'city': '', 'stream': '', 'name': 'Test Subject', 'description': '', 'type': None, 'no_underage': 'on', 'map_pin': '', 'available_parking': '', 'opportunities': '', 'address': '', 'free_admission': 'on', 'kid_friendly': 'on', 'nearby_transit': '', 'tags': '', 'location_name': '', 'admission_fee': '', 'website_url': '', 'zip': '', 'location_id': '', 'country': ''} 
Form is incorrectly returning as valid 
{} 

J'apprécierais de l'aide si quelqu'un peut dire où je me suis fait trébucher.

EDIT: C'est ce que je reçois dans le shell. Je pense que je comprends mal comment ceux-ci sont censés travailler:

>>> a = EventRegistrationForm({"name":"Adam"}) 
>>> a.is_valid() 
True 
>>> a.cleaned_data 
{} 
+0

Pourriez-vous nous montrer les modèles? – zaidfazil

+0

Je les ai postés –

Répondre

0

Vous avez défini beaucoup de vos champs dans votre modèle, blank=True, voilà pourquoi votre formulaire est de retour valide si aucune valeur est fournie. Si vous lisez la documentation, blank=True permet aux champs d'être vides dans ModelForms.

Vous pouvez remplacer dans votre méthode __init__() et mettre required=True,

class EventRegistrationForm(forms.Form): 
    tags = forms.TextInput() 

    class Meta: 
     model = Event 
     fields = [ 
      'name', 'description', 'type', 'map_pin', 'location_id', 'location_name', 'address1', 
      'address2', 'city', 'state', 'zip', 'country', 'admission_fee', 'free_admission', 'online_ticket_url', 
      'available_parking', 'nearby_transit', 'stream', 'kid_friendly', 'no_underage', 'website_url', 'opportunities' 
     ] 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     for field in self.fields: 
      self.fields[field].required = True 
+0

Mais ne devrait-il pas au moins échouer sur une 'description' vide et un' type' vide? En outre, cela n'explique pas pourquoi je ne reçois pas de données nettoyées lorsque je soumets un 'nom' valide. Il dit que le formulaire est valide, mais il n'y a rien dans mes 'nettoyé_données'. –

+0

J'ai essayé de définir la valeur true à l'aide du code que vous avez partagé, mais le problème persiste. –

0

Je l'ai résolu. Pour une raison quelconque, ce formulaire a été mis en place en utilisant un formulaire standard (forms.Form) au lieu d'un formulaire modèle (forms.ModelForm). Par conséquent, aucun de mes champs n'étaient enregistrés ...

class EventRegistrationForm(forms.ModelForm): 
    ....