123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- # -*- coding: utf-8 -*-
- import datetime
- from django.utils.translation import gettext_lazy as _
- from mongoengine.document import Document
- from mongoengine.fields import DateTimeField, IntField, StringField
- from mongoengine.queryset import QuerySetManager
- from django_extensions.mongodb.fields import AutoSlugField, CreationDateTimeField, ModificationDateTimeField
- class TimeStampedModel(Document):
- """
- TimeStampedModel
- An abstract base class model that provides self-managed "created" and
- "modified" fields.
- """
- created = CreationDateTimeField()
- modified = ModificationDateTimeField()
- class Meta:
- abstract = True
- class TitleSlugDescriptionModel(Document):
- """
- TitleSlugDescriptionModel
- An abstract base class model that provides title and description fields
- and a self-managed "slug" field that populates from the title.
- """
- title = StringField(max_length=255)
- slug = AutoSlugField(populate_from='title')
- description = StringField(blank=True, null=True)
- class Meta:
- abstract = True
- class ActivatorModelManager(QuerySetManager):
- """
- ActivatorModelManager
- Manager to return instances of ActivatorModel: SomeModel.objects.active() / .inactive()
- """
- def active(self):
- """
- Return active instances of ActivatorModel:
- SomeModel.objects.active()
- """
- return super().get_queryset().filter(status=1)
- def inactive(self):
- """
- Return inactive instances of ActivatorModel:
- SomeModel.objects.inactive()
- """
- return super().get_queryset().filter(status=0)
- class ActivatorModel(Document):
- """
- ActivatorModel
- An abstract base class model that provides activate and deactivate fields.
- """
- STATUS_CHOICES = (
- (0, _('Inactive')),
- (1, _('Active')),
- )
- status = IntField(choices=STATUS_CHOICES, default=1)
- activate_date = DateTimeField(blank=True, null=True, help_text=_('keep empty for an immediate activation'))
- deactivate_date = DateTimeField(blank=True, null=True, help_text=_('keep empty for indefinite activation'))
- objects = ActivatorModelManager()
- class Meta:
- abstract = True
- def save(self, *args, **kwargs):
- if not self.activate_date:
- self.activate_date = datetime.datetime.now()
- super().save(*args, **kwargs)
|