Reputation: 776
I've created a class for an RSS feed:
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']
}
As per my requirements, I want to make it so that either one or both of last_etag
and last_modified
fields are present (i.e. required). Would that be possible within MongoEngine?
Upvotes: 1
Views: 932
Reputation: 6374
For multi-field validation, you can override Document.clean
method, e.g.
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
You can see the docs for more info.
Upvotes: 1