2017-03-05 89 views
0

我希望此表單驗證兩個輸入中是否有日期屬性,或者根本沒有日期輸入,但不是隻有一個輸入是進入。WTForms - 使用兩個字段或不使用字段來驗證,但不只是一個字段

所以,如果你有一個開始日期,你必須有一個結束日期,反之亦然,但你不能只放一個開始或結束日期。

我的代碼如下:

class MyForm(Form): 
start = DateTimeField(u'Start', format='%Y-%m-%d') 
end_date = DateTimeField(u'End', format='%Y-%m-%d') 

所以,驗證是否可在:

  • 的字段均進入
  • 兩個領域都進入

不應驗證是否:

  • 只有兩種字段中輸入

預先感謝您的幫助!

回答

0

如果您對使用其他形式的約束不感興趣,則可以在線重寫驗證函數。更多:http://wtforms.readthedocs.io/en/latest/validators.html#custom-validators

class MyForm(Form): 
    start = DateTimeField(u'Start', format='%Y-%m-%d') 
    end_date = DateTimeField(u'End', format='%Y-%m-%d') 

    def validate(self): 
     if not Form.validate(self): 
      return False 

     a = self.start.field.data 
     b = self.end_date.field.data 
     if (a and b) or not (a or b): 
      return True 
     else: 
      self.start.field.errors.append('Both or none dates must exist.') 
      return False 
+0

感謝您的幫助。我想出了一個解決它的類似方法,請隨時查看我的答案並提供反饋。 – Tuffail

0

我最終解決這樣的:

創建的類定義之外的函數調用驗證:

def validator(form, field): 
    a = self.start.field.data 
    b = self.end_date.field.data 
    if not ((a and b) or not (a or b)): 
     raise ValidationError('Both or none dates must exist.') 

並修改了類是這樣的:

class MyForm(Form): 
    start = DateTimeField(u'Start', [validators.Optional(), validator], format='%Y-%m-%d') 
    date_end = DateTimeField(u'End', [validators.Optional(), validator], format='%Y-%m-%d') 

需要添加可選驗證器,因爲默認情況下WTForm會使Dat eTimeField必填字段