2017-10-05 68 views
0

我没有通过表单获取任何数据。我明显错过了一些东西,但我不知道是什么。Django Forms API - 返回空格的表格

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) 

输出

{'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 
{} 

如果有人能告诉我哪里有绊倒,我将不胜感激。

编辑:这是我得到的壳。我想我误解这是如何工作的:

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

您能告诉我们模型吗? – zaidfazil

+0

我已经发布了它们 –

回答

0

你已经在你的模型,blank=True定义你的很多领域,这就是为什么没有提供任何值,当您的形式返回有效。如果您阅读文档,blank=True允许这些字段在ModelForms中为空白。

你可以重写你的__init__()方法和设置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

但是它不应该至少在一个空白的'description'和一个空白的'type'上失败吗?另外,这并不能解释为什么当我提交一个有效的'name'时,我没有收到任何清理过的数据。它说该表单是有效的,但我的'清空数据'中没有任何内容。 –

+0

我尝试通过使用您共享的代码来将设置设置为true,但问题仍在发生。 –

0

我解决它。出于某种原因,此表格是使用标准表格(forms.Form)而不是模型表格(forms.ModelForm)设置的。因此,我的领域都没有被注册...

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