2010-10-28 72 views
0

我试图创建一个验证规则,如果(里程碑)对象target_date大于项目target_date,则传递错误。问题是没有提出任何错误。如何根据FK字段验证Django表单字段

对于纯朴的缘故,

models.py

class Project(models.Model): 
    target_date = models.DateField() 

class Milestone(models.Model): 
    project = models.ForeignKey(Project) 
    target_date = models.DateField() 

Forms.py

class MilestoneAddForm(forms.ModelForm): 

    class Meta: 
     model = Milestone 

    def clean_target_date(self): 
     tdate = self.cleaned_data['target_date'] 
     if tdate > self.instance.project.target_date 
      raise forms.ValidationError("Target Date is outside or project target date.") 
     return tdate 

views.py(丢弃无关的代码)

def MilestoneManage(request, project_id): 
    qs = Project.objects.none() 
    if request.method == 'POST': 
     formset = MilestoneFormSet(request.POST, prefix='new') 
     if formset.is_valid(): 
      newMiles = formset.save(commit=False) 
      for new in newMiles: 
       new.project_id = project.id 
       new.save() 
      return HttpResponseRedirect(reverse('project.views.detail', args=(project.id,))) 
    else: 
     formset = MilestoneFormSet2(queryset=qs, prefix='new') 
    return render_to_response('project/manageMilestones.html', { 
     'formset': formset, 
    }, context_instance=RequestContext(request)) 
+0

什么是确切的错误?并且请你能提供实际运行的代码(上面至少有两个语法错误)。 – 2010-10-28 21:51:34

回答

1

这应该工作。有关更改内容的更多信息,请参阅行内注释。

def clean_target_date(self): 
    #     V-- typo (cleand_data => cleaned_data) 
    tdate = self.cleaned_data['target_date'] 
    project = self.instance.project 
    # project allows for nulls, so check that first. 
    if project is None: 
     raise forms.ValidationError("There's no project associated with this milestone.") 
    #     V-- Do an attribute lookup, don't use the query lookup syntax 
    if tdate > project.target_date: 
     raise forms.ValidationError("Target Date is outside or project target date.") 
    return tdate 
+0

不错,它现在运行但不会抛出错误。 – jlarry 2010-10-28 22:29:48

+0

@Dronestudios:你确定target_date大于项目的target_date吗?如果你调试到它会发生什么? – sdolan 2010-10-28 22:45:54

+0

在django上还是比较新的,我的调试foo目前很弱。这很可能会让我有点想弄清楚发生了什么事情。这似乎没有任何代码被调用。 – jlarry 2010-10-28 22:54:29