2012-03-22 102 views

回答

1

首先,你应该在形式层面做到这一点,看到Cleaning and validating fields that depend on each other有关如何执行此操作,它应该是这样的:

def clean(self): 
    cleaned_data = super(YourForm, self).clean() 
    if cleaned_data['start_time'] > cleaned_data['end_time']: 
     raise forms.ValidationError(_(u'Start time must be before end time')) 

此外,您还可以在保存低水平强制执行方法或在pre_savesignal

from django.db.models import signals 

class StartTimeAfterEndTimeException(Exception): 
    def __init__(self, model): 
     super(StartTimeAfterEndTimeException, self).__init__(
      'Start time %s should not be after end time %s' % (
       model.start_time, model.end_time)) 

def session_force_end_time(sender, instance, **kwargs): 
    if instance.start_time >= instance.end_time: 
     raise StartTimeAfterEndTimeException(instance) 
signals.pre_save.connect(session_force_end_time, sender=Session) 

但是,这是相当低的水平,所以它不是用户友好的。

+0

在表单级别,我必须为每种形式的应用程序定义这种行为吗? – 2012-03-22 11:14:42

+0

您应该定义此行为一次且仅限一次。你可以在SessionForm中定义这个行为,并且有其他的Session类从SessionForm继承下来。 – jpic 2012-03-22 11:16:52

+0

好的我明白了,我会尝试继承表单。谢谢 – 2012-03-22 11:19:19