验证需要任一字段 - MongoEngine
Either field is required for validation - MongoEngine
我为 RSS 提要创建了 class:
from mongoengine import *
class RSS(Document):
time_added = DateTimeField(default=datetime.datetime.utcnow)
link = StringField(required=True)
title = StringField(required=True)
last_entry_id = StringField(required=True)
last_etag = StringField()
last_modified = DateTimeField()
subscribed = ListField(IntField(), required=True)
meta = {
'collection': 'rss',
'indexes': ['$title']
}
根据我的要求,我想做到 last_etag
中的一个 或 两者 和 last_modified
字段存在(即必需)。这在 MongoEngine 中可能吗?
对于 multi-field 验证,您可以覆盖 Document.clean
方法,例如
from mongoengine import *
import datetime as dt
class RSS(Document):
etag = StringField()
last_modified = DateTimeField()
def clean(self):
if not self.etag and not self.last_modified:
raise ValidationError('etag and or last_modified are required')
RSS().save() # Fails with ValidationError (etag and/or last_modified are required)
RSS(etag='123456789').save() # passes
RSS(etag='123456789', last_modified=dt.datetime.utcnow()).save() # passes
您可以查看 docs 了解更多信息。
我为 RSS 提要创建了 class:
from mongoengine import *
class RSS(Document):
time_added = DateTimeField(default=datetime.datetime.utcnow)
link = StringField(required=True)
title = StringField(required=True)
last_entry_id = StringField(required=True)
last_etag = StringField()
last_modified = DateTimeField()
subscribed = ListField(IntField(), required=True)
meta = {
'collection': 'rss',
'indexes': ['$title']
}
根据我的要求,我想做到 last_etag
中的一个 或 两者 和 last_modified
字段存在(即必需)。这在 MongoEngine 中可能吗?
对于 multi-field 验证,您可以覆盖 Document.clean
方法,例如
from mongoengine import *
import datetime as dt
class RSS(Document):
etag = StringField()
last_modified = DateTimeField()
def clean(self):
if not self.etag and not self.last_modified:
raise ValidationError('etag and or last_modified are required')
RSS().save() # Fails with ValidationError (etag and/or last_modified are required)
RSS(etag='123456789').save() # passes
RSS(etag='123456789', last_modified=dt.datetime.utcnow()).save() # passes
您可以查看 docs 了解更多信息。