Любое поле обязательно для проверки - MongoEngine - PullRequest
1 голос
/ 30 июня 2019

Я создал класс для RSS-канала:

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?

1 Ответ

1 голос
/ 30 июня 2019

Для проверки нескольких полей вы можете переопределить метод 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

. Для получения дополнительной информации вы можете просмотреть документы .

...