2011-04-20 44 views
0

forms.py如何访问modelForms领域,这是因为模型通过

class BandForm(forms.ModelForm): 
    time_from = forms.ChoiceField(choices=[(8, "08:00"),(9, "09:00"),(10, "10.00"),(11, "11:00"), 
              (12, "12:00"),(13, "13:00"),(14, "14:00"),(15, "15:00"), 
              (16, "16:00"),(17, "17:00"),(18, "18:00"),(19, "19:00"), 
              (20, "20:00"),(21, "21:00"),(22, "22:00"),(23, "23:00")]) 
    time_to = forms.ChoiceField(choices=[(8, "08:00"),(9, "09:00"),(10, "10:00"),(11, "11:00"), 
              (12, "12:00"),(13, "13:00"),(14, "14:00"),(15, "15:00"), 
              (16, "16:00"),(17, "17:00"),(18, "18:00"),(19, "19:00"), 
              (20, "20:00"),(21, "21:00"),(22, "22:00"),(23, "23:00")]) 
    class Meta: 
     model = Entry1 
     exclude = ('created','date') 

部分views.py

if request.method == "POST": 
     form = BandForm(request.POST) 
     if form.is_valid(): 
      form = form.save(commit=False) 
      if year and month and day: 
       form.date = datetime.date(int(year),int(month),int(day)) 
       form.save() 

可以说我想要做一些形式验证.py for my class Bandform

def clean_fieldname(self): ....

通常你会得到像这样的参数 - self.cleaned_data.get('field_name')。所以,如果我尝试获取self.cleaned_data.get('time_from') - 所有东西都很棒。但是,如果我尝试获取self.cleaned_data.get('日期'),我得到None返回。

为什么?

回答

Django Modelform (with excluded field) 这是从我提供的帖子有点不清楚,你必须在forms.py访问实例为self.instance.fieldname但不self.cleaned_data.get(唯一'字段名')。

+1

因为它不存在? – 2011-04-20 17:09:21

+0

在models.py我有一个类Entry1与字段日期= models.DateField()。如果我把它auto_now_add = True它自动插入日期,一切正常。如果我在保存表单之前在视图中插入日期,它怎么不存在? – Viktor 2011-04-20 17:17:58

回答

0

在你排除:

exclude = ('created','date') 

你将从形式可见不含date领域。这可能解释了为什么您无法访问cleared_data中的date。尝试从排除元组中移除date并将其呈现在您的模板中,以查看它是否显示出来。

+0

确保它以这种方式工作,就像request.POST一样。但是,如果我不排除日期我得到它的形式,用户必须填写,我不想要的。我需要手动设置它,就像你在我看来的那样。 – Viktor 2011-04-20 22:58:52

+0

现在,我从'排除'字段带走了日期...我也通过手动设置字段{{form.fieldname}}等等将它排除在模板之外......所以我摆脱了我的模板中的字段问题.. ..但仍感觉像'form.date = datetime.date(int(year),int(month),int(day))'没有给日期字段赋值,而且我只返回None。 – Viktor 2011-04-20 23:38:10

+0

另外,如果它有帮助...当我尝试在外壳中填充这样的形式:'data = {'band_title':'hello','created':datetime.datetime(2011,3,3),'date ':datetime.date(2011,3,3),'time_from':8,'time_to':9}' - 'f = BandForm(data)| f.cleaned_data'我只得到3个参数'{'band_title':u'hello','time_to':u'9','time_from':u'8'}'而不是5。 D – Viktor 2011-04-20 23:58:19