コード例 #1
0
ファイル: models.py プロジェクト: KadogoKenya/Awwards
def prepare_translatable_model(sender, **kwargs):
    model = sender
    if not issubclass(model, TranslatableModel) or model._meta.abstract:
        return

    if model._meta.proxy:
        model._meta.translations_accessor = model._meta.concrete_model._meta.translations_accessor
        model._meta.translations_model = model._meta.concrete_model._meta.translations_model
        model._meta.translations_cache = model._meta.concrete_model._meta.translations_cache

    if not hasattr(model._meta, 'translations_model'):
        raise ImproperlyConfigured(
            "No TranslatedFields found on %r, subclasses of "
            "TranslatableModel must define TranslatedFields." % model)

    #### Now we have to work ####

    # Ensure _base_manager cannot be TranslationManager despite use_for_related_fields
    # 1- it is useless unless default_class is overriden
    # 2- in that case, _base_manager is used for saving objects and must not be
    #    translation aware.
    base_mgr = getattr(model, '_base_manager', None)
    if base_mgr is None or isinstance(base_mgr, TranslationManager):
        assert django.VERSION < (1, 10)
        model.add_to_class('_base_manager', Manager())

    # Replace get_field_by_name with one that warns for common mistakes
    if django.VERSION < (1, 9) and not isinstance(
            model._meta.get_field_by_name, SmartGetFieldByName):
        model._meta.get_field_by_name = MethodType(
            SmartGetFieldByName(model._meta.get_field_by_name), model._meta)
    if not isinstance(model._meta.get_field, SmartGetField):
        model._meta.get_field = MethodType(
            SmartGetField(model._meta.get_field), model._meta)
コード例 #2
0
 def test_invalid_manager(self):
     attrs = {
         'objects': Manager(),
         '__module__': 'hvad.test_utils.project.app',
     }
     self.assertRaises(ImproperlyConfigured, type, 'InvalidModel',
                       (TranslatableModel, ), attrs)
コード例 #3
0
class WeeklyFieldIndicators(models.Model):
    class Meta:
        constraints = [
            models.UniqueConstraint(fields=["field_id", "date_observed"],
                                    name="unique weekly field indicators row")
        ]

    field_id = models.UUIDField(editable=True, unique=False)
    user_id = models.CharField(max_length=30, blank=False)
    date_observed = models.DateField(blank=False)
    field_ndvi = models.FloatField(blank=True, null=True)
    field_ndwi = models.FloatField(blank=True, null=True)
    field_precipitation = models.FloatField(blank=True, null=True)
    field_temperature = models.FloatField(blank=True, null=True)
    field_evapotranspiration = models.FloatField(blank=True, null=True)
    deleted = models.BooleanField(default=False)

    objects = SoftDeleteManager(
    )  # https://www.youtube.com/watch?v=nlZHpGPkfbQ
    all_objects = Manager()

    def restore(self):
        self.deleted = False
        self.save()

    def soft_delete(self):
        self.deleted = True
        self.save()

    def delete(self):
        raise Error()
コード例 #4
0
class SingletonModel(models.Model):
    class Meta:
        abstract = True

    # override defualt manager and user privet manager
    objects = None
    __objects = Manager()

    def __str__(self):
        return 'Singleton Object'

    def set_cache(self):
        cache.set(self.__class__.__name__, self)

    def save(self, *args, **kwargs):
        self.pk = 1
        super(SingletonModel, self).save(*args, **kwargs)
        self.set_cache()

    def delete(self, *args, **kwargs):
        pass

    @classmethod
    def load(cls, **kwargs):
        if cache.get(cls.__name__) is None:
            obj, created = cls.__objects.get_or_create(pk=1, defaults=kwargs)
            if not created:
                obj.set_cache()
        return cache.get(cls.__name__)
コード例 #5
0
    def _prepare(cls):
        # TODO: How do we extend the parent classes classmethod properly?
        # super(CachedModel, cls)._prepare() errors
        opts = cls._meta
        opts._prepare(cls)

        if opts.order_with_respect_to:
            cls.get_next_in_order = curry(cls._get_next_or_previous_in_order,
                                          is_next=True)
            cls.get_previous_in_order = curry(
                cls._get_next_or_previous_in_order, is_next=False)
            setattr(opts.order_with_respect_to.rel.to,
                    'get_%s_order' % cls.__name__.lower(),
                    curry(method_get_order, cls))
            setattr(opts.order_with_respect_to.rel.to,
                    'set_%s_order' % cls.__name__.lower(),
                    curry(method_set_order, cls))

        # Give the class a docstring -- its definition.
        if cls.__doc__ is None:
            cls.__doc__ = "%s(%s)" % (cls.__name__, ", ".join(
                [f.attname for f in opts.fields]))

        if hasattr(cls, 'get_absolute_url'):
            cls.get_absolute_url = curry(get_absolute_url, opts,
                                         cls.get_absolute_url)

        cls.add_to_class('objects', CacheManager())
        cls.add_to_class('nocache', Manager())
        cls.add_to_class('_default_manager', cls.nocache)
        signals.class_prepared.send(sender=cls)
コード例 #6
0
ファイル: models.py プロジェクト: yannik-ammann/django-hvad
def prepare_translatable_model(sender, **kwargs):
    model = sender
    if not issubclass(model, TranslatableModel) or model._meta.abstract:
        return
    if not isinstance(model._default_manager, TranslationManager):
        raise ImproperlyConfigured(
            "The default manager on a TranslatableModel must be a "
            "TranslationManager instance or an instance of a subclass of "
            "TranslationManager, the default manager of %r is not." % model)

    # If this is a proxy model, get the concrete one
    concrete_model = model._meta.concrete_model if model._meta.proxy else model

    # Find the instance of TranslatedFields in the concrete model's dict
    found = None
    for relation in list(concrete_model.__dict__.keys()):
        try:
            obj = getattr(model, relation)
            shared_model = obj.related.model._meta.shared_model
        except AttributeError:
            continue
        if shared_model is concrete_model:
            if found:
                raise ImproperlyConfigured(
                    "A TranslatableModel can only define one set of "
                    "TranslatedFields, %r defines more than one: %r to %r "
                    "and %r to %r and possibly more" % (model, obj,
                    obj.related.model, found, found.related.model))
            # Mark as found but keep looking so we catch duplicates and raise
            found = obj

    if not found:
        raise ImproperlyConfigured(
            "No TranslatedFields found on %r, subclasses of "
            "TranslatableModel must define TranslatedFields." % model
        )

    #### Now we have to work ####

    contribute_translations(model, found.related)

    # Ensure _base_manager cannot be TranslationManager despite use_for_related_fields
    # 1- it is useless unless default_class is overriden
    # 2- in that case, _base_manager is used for saving objects and must not be
    #    translation aware.
    base_mgr = getattr(model, '_base_manager', None)
    if base_mgr is None or isinstance(base_mgr, TranslationManager):
        model.add_to_class('_base_manager', Manager())

    # Replace get_field_by_name with one that warns for common mistakes
    if not isinstance(model._meta.get_field_by_name, SmartGetFieldByName):
        smart_get_field_by_name = SmartGetFieldByName(model._meta.get_field_by_name)
        model._meta.get_field_by_name = MethodType(smart_get_field_by_name , model._meta)

    # Attach save_translations
    post_save.connect(model.save_translations, sender=model, weak=False)
コード例 #7
0
class Brand(DCFModel["Brand"], Serializable):
    objects: Manager["Brand"] = Manager()

    name = m.CharField(max_length=100, unique=True, null=True)
    priority = m.IntegerField(default=1)
    products: RelatedManager[Product]

    @classmethod
    def get_serializer_class(cls, version: str | None,
                             context: Any) -> Type[BrandSerializer]:
        return BrandSerializer
コード例 #8
0
class File(models.Model):
    id = models.CharField(max_length=16, primary_key=True)
    user = models.ForeignKey(User)

    filename = models.TextField()
    filesize = models.IntegerField()
    mimetype = models.CharField(max_length=64)
    url = models.URLField()

    objects = Manager()
    manager = FileManager()
コード例 #9
0
class BookInfo(models.Model):
    btitle = models.CharField(max_length=100)
    bpubdate = models.DateField()
    bread = models.IntegerField()
    bcomment = models.IntegerField()
    isdelete = models.BooleanField()

    bookinfo_manager1 = Manager()
    bookinfo_manager2 = BookInfo_Manager()

    def __str__(self):
        return self.btitle
コード例 #10
0
class GroupMeUser(BaseModel):
    users = Manager()
    name = models.CharField(max_length=64)
    group_me_id = models.CharField(max_length=32, unique=True)
    token = models.CharField(max_length=32, unique=True)

    def __str__(self):
        return self.name

    @property
    def is_authenticated(self):
        response = request_current_user(self.token)
        return response["meta"]["code"] == 200
コード例 #11
0
class OneTimePassword(models.Model):
    user = models.ForeignKey(User,
                             on_delete=models.CASCADE,
                             related_name='otp_set')
    signature = models.CharField(max_length=32, db_index=True)
    send_counter = models.PositiveIntegerField(default=0)
    last_send = models.DateTimeField(default=timezone.now)
    check_counter = models.PositiveIntegerField(default=0)
    last_check = models.DateTimeField(default=timezone.now)

    objects = Manager()

    def save(self, *args, **kwargs):
        if not self.pk or not self.signature:
            self.refresh_signature()
        super(OneTimePassword, self).save(*args, **kwargs)

    def refresh_signature(self, commit=False):
        self.signature = generate_signature(self.user_id)
        if commit:
            self.save()

    def can_request_otp(self):
        now = timezone.now()
        duration = get_duration(self.last_send, now)
        if duration > OTP_INTERVAL.OTP_REQUEST:
            allowed = True
            self.send_counter = 1
        else:
            self.send_counter += 1
            allowed = self.send_counter <= OTP_LIMIT.OTP_REQUEST
        if allowed:
            self.last_send = now
        self.save()
        return allowed

    def can_check_otp(self):
        now = timezone.now()
        duration = get_duration(self.last_check, now)
        if duration > OTP_INTERVAL.OTP_CHECK:
            allowed = True
            self.check_counter = 1
        else:
            self.check_counter += 1
            allowed = self.check_counter <= OTP_LIMIT.OTP_CHECK
        if allowed:
            self.last_check = now
        self.save()
        return allowed
コード例 #12
0
class AbstractOffer(AbstractImg):
    created_date = models.DateTimeField(_("Created date"), default=now)
    start_date = models.DateTimeField(_("Start date"), default=now)
    end_date = models.DateTimeField(_("End date"), default=now)
    title = std_text_field(_('Title'))
    text = models.TextField(verbose_name=_("Offer text"), blank=True)
    enabled = models.BooleanField(verbose_name=_("Enabled"), default=False)
    slug = models.CharField(verbose_name=_('URL-identifier'), max_length=100, blank=True)
    position = models.PositiveSmallIntegerField(verbose_name=_('Priority'), db_index=True, default=0, blank=True)

    objects = Manager()

    class Meta:
        verbose_name = _('Special Offer')
        verbose_name_plural = _('Special Offers')
        abstract = True
コード例 #13
0
ファイル: models.py プロジェクト: samucc/nnmware
class AgentPercent(models.Model):
    hotel = models.ForeignKey(Hotel)
    date = models.DateField(verbose_name=_("From date"), db_index=True)
    percent = models.DecimalField(verbose_name=_('Percent'), blank=True, decimal_places=1, max_digits=4, default=0,
                                  db_index=True)

    class Meta:
        verbose_name = _("Agent Percent")
        verbose_name_plural = _("Agent Percents")
        ordering = ("hotel",)

    objects = Manager()

    def __str__(self):
        return _("For %(hotel)s on date %(date)s percent is %(percent)s") % dict(hotel=self.hotel.name, date=self.date,
                                                                                 percent=self.percent)
コード例 #14
0
class BasePage(SoftDeletableModel):
    title = models.CharField(max_length=50)
    content = RichTextField(blank=True)
    creator = models.ForeignKey(Account)
    creation_date = models.DateTimeField(auto_now_add=True)
    group_id = models.UUIDField(primary_key=False, default=uuid.uuid4, editable=False)
    version = models.IntegerField()
    changelog = models.CharField(max_length=50, blank=True)

    objects = Manager()
    active_pages = SoftDeletableManager()

    class Meta:
        abstract = True

    @property
    def category(self):
        return self.__class__.__name__
コード例 #15
0
class Plan(models.Model):
    """
    Model base plan object
    """
    GRAPH_TYPE = 0
    TABLE_TYPE = 1
    TYPES = ((GRAPH_TYPE, 'Graph view of plan'), (TABLE_TYPE,
                                                  'Table view of plan'))

    name = models.CharField(max_length=140)
    slug = models.SlugField(max_length=140,
                            db_index=True,
                            null=True,
                            blank=True)
    description = models.CharField(max_length=200, blank=True, null=True)
    version = models.PositiveSmallIntegerField()
    type = models.PositiveIntegerField(choices=TYPES)
    date_creation = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    last_update = models.DateTimeField(auto_now=True)

    # Managers
    objects = Manager()
    graph_plan_objects = GraphPlanManager()
    table_plan_objects = TablePlanManager()

    def __str__(self):
        return f'{self.author.__str__()} - {self.name} ({self.version})'

    def save(self, *args, **kwargs):
        self.slug = hashlib.md5((self.name + self.author.get_full_name() +
                                 str(self.version)).encode()).hexdigest()
        super(Plan, self).save(*args, **kwargs)

    def get_absolute_url(self):
        if self.type == self.GRAPH_TYPE:
            return reverse('graph:to_plan', args=(self.slug, ))
        else:
            return reverse('table:to_plan', args=(self.slug, ))

    class Meta:
        unique_together = ('author', 'slug', 'version')
        verbose_name = 'Plan'
        verbose_name_plural = 'Plans'
コード例 #16
0
class Category(MPTTModel, TimeStampedModel, SoftDeletableModel):
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', verbose_name=_('parent category'),
                            on_delete=models.SET_NULL)
    name = models.CharField(_('name'), max_length=255, unique=True)
    cover = models.OneToOneField('covers.Cover', verbose_name=_('cover'), blank=True, null=True,
                                 on_delete=models.SET_NULL)
    slug = AutoSlugField(populate_from='name', max_length=255, allow_unicode=True, unique=True)
    description = models.TextField(_('description'), blank=True)

    objects = Manager()
    tree = TreeManager()

    class Meta:
        verbose_name = _('Category')
        verbose_name_plural = _('Categories')

    class MPTTMeta:
        order_insertion_by = ['created']

    def __str__(self):
        return self.name
コード例 #17
0
class Color(models.Model):
    """
    Base color model
    """
    BASE_COLOR = 0
    CUSTOM_COLOR = 1
    TYPES = ((BASE_COLOR, 'Base color'), (CUSTOM_COLOR, 'User color'))
    type = models.PositiveIntegerField(choices=TYPES)
    # String color in hex
    hex = models.CharField(max_length=6)
    name = models.CharField(max_length=20)
    description = models.CharField(max_length=100, null=True, blank=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    # color manages
    objects = Manager()
    base_colors = BaseColorManager()
    custom_color = UserColorManager()

    def __str__(self):
        return f'{self.author.__str__()} - {super().__str__()}'

    class Meta:
        ordering = ('name', )
コード例 #18
0
class OrderBookSwaps(models.Model):
    STATE_CREATED = 'created'
    STATE_ACTIVE = 'active'
    STATE_EXPIRED = 'expired'
    STATE_POSTPONED = 'postponed'
    STATE_DONE = 'done'
    STATE_CANCELLED = 'cancelled'
    STATE_HIDDEN = 'hidden'

    ORDER_STATES = (
        (STATE_CREATED, 'CREATED'),
        (STATE_ACTIVE, 'ACTIVE'),
        (STATE_EXPIRED, 'EXPIRED'),
        (STATE_POSTPONED, 'POSTPONED'),
        (STATE_DONE, 'DONE'),
        (STATE_CANCELLED, 'CANCELLED'),
        (STATE_HIDDEN, 'HIDDEN'),
    )

    name = models.CharField(max_length=512, null=True, default='')
    memo_contract = models.CharField(max_length=70,
                                     null=True,
                                     default=_get_memo)
    network = models.ForeignKey(Network,
                                on_delete=models.PROTECT,
                                related_name='orders',
                                default=1)
    contract_address = models.CharField(max_length=255,
                                        verbose_name='Contract address',
                                        default='')
    # base_coin_id = models.IntegerField(default=0)
    base_address = models.CharField(max_length=50, null=True, default='')
    base_limit = models.DecimalField(
        max_digits=50,
        decimal_places=18,
    )
    # quote_coin_id = models.IntegerField(default=0)
    quote_address = models.CharField(max_length=50, null=True, default='')
    quote_limit = models.DecimalField(
        max_digits=50,
        decimal_places=18,
    )
    user = models.ForeignKey(
        User,
        on_delete=models.PROTECT,
        related_name='orders',
    )
    owner_address = models.CharField(max_length=50, null=True, default='')
    exchange_user = models.CharField(max_length=512, null=True, default='')
    broker_fee = models.BooleanField(default=False)
    broker_fee_address = models.CharField(max_length=50, null=True, default='')
    broker_fee_base = models.FloatField(null=True, default=0)
    broker_fee_quote = models.FloatField(null=True, default=0)
    min_base_wei = models.CharField(max_length=512, null=True, default='')
    min_quote_wei = models.CharField(max_length=512, null=True, default='')
    base_amount_contributed = models.DecimalField(max_digits=MAX_WEI_DIGITS,
                                                  decimal_places=0,
                                                  default=0)
    base_amount_total = models.DecimalField(max_digits=MAX_WEI_DIGITS,
                                            decimal_places=0,
                                            default=0)
    quote_amount_contributed = models.DecimalField(max_digits=MAX_WEI_DIGITS,
                                                   decimal_places=0,
                                                   default=0)
    quote_amount_total = models.DecimalField(max_digits=MAX_WEI_DIGITS,
                                             decimal_places=0,
                                             default=0)
    public = models.BooleanField(default=True)
    unique_link = models.CharField(max_length=50,
                                   null=True,
                                   unique=True,
                                   default=_get_unique_link)
    created_date = models.DateTimeField(auto_now_add=True)
    stop_date = models.DateTimeField(default=timezone.now)
    contract_state = models.CharField(
        max_length=63,
        choices=ORDER_STATES,
        default=STATE_CREATED,
    )
    state = models.CharField(
        max_length=63,
        choices=ORDER_STATES,
        default=STATE_CREATED,
    )
    state_changed_at = models.DateTimeField(auto_now_add=True)
    whitelist = models.BooleanField(default=False)
    whitelist_address = models.CharField(max_length=50, null=True)
    swap_ether_contract = models.ForeignKey(Contract, null=True)
    is_exchange = models.BooleanField(default=False)
    notification = models.BooleanField(default=False)
    notification_email = models.CharField(max_length=50, null=True, default='')
    notification_telegram_name = models.CharField(max_length=50,
                                                  null=True,
                                                  default='')
    comment = models.TextField(default='')
    is_rubic_order = models.BooleanField(default=False)
    rubic_initialized = models.BooleanField(default=False)
    is_displayed = models.BooleanField(default=True)
    is_closed_by_limiter = models.BooleanField(default=False)
    # ! ---
    swaped_on_uniswap = models.BooleanField(default=False)
    # --
    # !--- Managers
    objects = Manager()
    public_active_orders = PublicActiveOrdersManager(state=STATE_ACTIVE)

    # ---

    class Meta:
        indexes = (models.Index(fields=[
            'id',
            'unique_link',
        ]), )

    def __str__(self):
        return f'Order "{self.name}" (unique link: {self.unique_link})'

    @check_transaction
    def msg_deployed(self):
        self.state = self.STATE_ACTIVE
        self.contract_state = self.STATE_ACTIVE
        self.save()
        if self.user.email:
            swaps_link = '{protocol}://{url}/public-v3/{unique_link}'.format(
                protocol=SITE_PROTOCOL,
                unique_link=self.unique_link,
                url=SWAPS_URL)
            sendEMail(swaps_deploed_subject,
                      swaps_deploed_message.format(swaps_link=swaps_link),
                      [self.user.email])

    def finalized(self):
        self.state = self.STATE_DONE
        self.contract_state = self.STATE_DONE
        self.state_changed_at = datetime.utcnow()
        self.save()

    def cancelled(self):
        self.state = self.STATE_CANCELLED
        self.contract_state = self.STATE_CANCELLED
        self.state_changed_at = datetime.utcnow()
        self.save()

    def deposit_order(self, message):
        msg_amount = message['amount']
        base_address = self.base_address.lower()
        quote_address = self.quote_address.lower()
        if message['token'] == base_address or message[
                'token'] == quote_address:
            if message['token'] == self.base_address:
                self.base_amount_contributed += msg_amount
                self.base_amount_total += msg_amount
            else:
                self.quote_amount_contributed += msg_amount
                self.quote_amount_total += msg_amount

            self.save()

    def refund_order(self, message):
        msg_amount = message['amount']
        base_address = self.base_address.lower()
        quote_address = self.quote_address.lower()
        if message['token'] == base_address or message[
                'token'] == quote_address:
            if message['token'] == self.base_address:
                self.base_amount_contributed -= msg_amount
            else:
                self.quote_amount_contributed -= msg_amount

            self.save()

    def save(self, *args, **kwargs):
        self.base_address = self.base_address.lower()
        self.quote_address = self.quote_address.lower()
        self.owner_address = self.owner_address.lower()
        self.broker_fee_address = self.broker_fee_address.lower()

        return super().save(*args, **kwargs)
コード例 #19
0
ファイル: models.py プロジェクト: TheVinhLuong102/Django-Util
class _ModelWithObjectsManagerAndDefaultMetaOptionsABC(Model):
    # docs.djangoproject.com/en/dev/ref/models/class/#objects
    objects: Manager = Manager()

    # docs.djangoproject.com/en/dev/ref/models/options/#model-meta-options
    class Meta:   # pylint: disable=too-few-public-methods
        """Metadata."""

        # docs.djangoproject.com/en/dev/ref/models/options/#abstract
        abstract: bool = True

        # docs.djangoproject.com/en/dev/ref/models/options/#app-label
        # app_label: str = '...'

        # docs.djangoproject.com/en/dev/ref/models/options/#base-manager-name
        base_manager_name: str = 'objects'

        # docs.djangoproject.com/en/dev/ref/models/options/#db-table
        # docs.djangoproject.com/en/dev/ref/models/options/#table-names
        # db_table: str = '...'

        # docs.djangoproject.com/en/dev/ref/models/options/#db-tablespace
        db_tablespace: str = ''

        # docs.djangoproject.com/en/dev/ref/models/options/#default-manager-name
        default_manager_name: str = 'objects'

        # docs.djangoproject.com/en/dev/ref/models/options/#default-related-name
        # default_related_name: str = '...'

        # docs.djangoproject.com/en/dev/ref/models/options/#get-latest-by
        # get_latest_by: Union[str, Sequence[str]] = ...

        # docs.djangoproject.com/en/dev/ref/models/options/#managed
        managed: bool = True

        # docs.djangoproject.com/en/dev/ref/models/options/#order-with-respect-to
        # order_with_respect_to: str = '...'

        # docs.djangoproject.com/en/dev/ref/models/options/#ordering
        ordering: Sequence[str] = ()

        # docs.djangoproject.com/en/dev/ref/models/options/#permissions
        permissions: Sequence[tuple[str, str]] = ()

        # docs.djangoproject.com/en/dev/ref/models/options/#default-permissions
        default_permissions: Sequence[str] = 'add', 'change', 'delete', 'view'

        # docs.djangoproject.com/en/dev/ref/models/options/#proxy
        proxy: bool = False

        # docs.djangoproject.com/en/dev/ref/models/options/#required-db-features
        required_db_features: Sequence[str] = ()

        # docs.djangoproject.com/en/dev/ref/models/options/#required-db-vendor
        # required_db_vendor: str = '...'

        # docs.djangoproject.com/en/dev/ref/models/options/#select-on-save
        select_on_save: bool = False

        # docs.djangoproject.com/en/dev/ref/models/options/#indexes
        indexes: Sequence[Index] = ()

        # DEPRECATED
        # docs.djangoproject.com/en/dev/ref/models/options/#unique-together
        # unique_together: Sequence[Union[str, Sequence[str]]] = ()

        # DEPRECATED
        # docs.djangoproject.com/en/dev/ref/models/options/#index-together
        # index_together: Sequence[Union[str, Sequence[str]]] = ()

        # docs.djangoproject.com/en/dev/ref/models/options/#constraints
        constraints: Sequence[BaseConstraint] = ()

        # docs.djangoproject.com/en/dev/ref/models/options/#verbose-name
        # verbose_name: str = '...'

        # docs.djangoproject.com/en/dev/ref/models/options/#verbose-name-plural
        # verbose_name_plural: str  = '...'

    def __str__(self) -> str:
        # pylint: disable=no-member
        return f'{self._meta.verbose_name} #{self.pk}'
コード例 #20
0
ファイル: test_backends.py プロジェクト: ercpe/phylter
 def test_supports(self):
     assert DjangoBackend.supports(QuerySet())
     assert DjangoBackend.supports(Manager())
     assert not DjangoBackend.supports(Q())
コード例 #21
0
ファイル: models.py プロジェクト: varuni-bit/food-web-app
class _ModelWithObjectsManagerAndDefaultMetaOptionsMixInABC(Model):
    # https://docs.djangoproject.com/en/dev/ref/models/class/#objects
    # https://docs.djangoproject.com/en/dev/ref/models/class/#django.db.models.Model.objects
    objects = Manager()

    # https://docs.djangoproject.com/en/dev/ref/models/options/#model-meta-options
    class Meta:
        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.abstract
        abstract = True

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.app_label
        # TODO: *** Django 2 Cannot Interpolate %(app_label), etc. ***
        # *** so must explicitly set this in non-abstract sub-classes ***
        # app_label = '%(app_label)s'

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.base_manager_name
        base_manager_name = 'objects'

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.db_table
        # https://docs.djangoproject.com/en/dev/ref/models/options/#table-names
        # TODO: *** Django 2 Cannot Interpolate %(app_label), etc. ***
        # *** so must explicitly set this in non-abstract sub-classes ***
        db_table = '"%(app_label)s_%(object_name)s"'  # note: except for Oracle, quotes have no effect

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.db_tablespace
        db_tablespace = None

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.default_manager_name
        default_manager_name = 'objects'

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.default_related_name
        # TODO: *** Django 2 Cannot Interpolate %(app_label), etc. ***
        # *** so must explicitly set this in non-abstract sub-classes ***
        default_related_name = '%(model_name)ss'

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.get_latest_by
        get_latest_by = None

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.managed
        managed = True

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.order_with_respect_to
        order_with_respect_to = None

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.ordering
        ordering = None

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.permissions
        permissions = ()

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.default_permissions
        default_permissions = \
            'add', \
            'change', \
            'delete', \
            'view'

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.proxy
        proxy = False

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.required_db_features
        required_db_features = ()

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.required_db_vendor
        required_db_vendor = 'postgresql'

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.select_on_save
        select_on_save = False

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.indexes
        indexes = ()

        # (MAY BE DEPRECATED)
        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.unique_together
        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.index_together

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.constraints
        constraints = ()

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.verbose_name
        # TODO: *** Django 2 Cannot Interpolate %(app_label), etc. ***
        verbose_name = '%(object_name)s'

        # https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.verbose_name_plural
        # TODO: *** Django 2 Cannot Interpolate '%(app_label)', etc. ***
        # *** so must explicitly set this in non-abstract sub-classes ***
        verbose_name_plural = '%(object_name)ss'
コード例 #22
0
class Room(AbstractName):
    option = models.ManyToManyField(RoomOption,
                                    verbose_name=_('Availability options'),
                                    blank=True)
    hotel = models.ForeignKey(Hotel,
                              verbose_name=_('Hotel'),
                              null=True,
                              blank=True)
    places = models.IntegerField(_("Place Count"),
                                 choices=PLACES_CHOICES,
                                 default=PLACES_UNKNOWN,
                                 db_index=True)
    typefood = models.IntegerField(_("Type of food"),
                                   choices=TYPEFOOD,
                                   default=TYPEFOOD_RO,
                                   db_index=True)
    surface_area = models.PositiveSmallIntegerField(
        verbose_name=_('Surface area (m2)'), default=0, db_index=True)

    class Meta:
        verbose_name = _("Room")
        verbose_name_plural = _("Rooms")

    objects = Manager()

    def __str__(self):
        try:
            return _("%(room)s :: %(places)s :: %(hotel)s") % {
                'room': self.get_name,
                'places': self.places,
                'hotel': self.hotel.get_name
            }
        except:
            return self.name

    @property
    def metadesc(self):
        r = self.description
        if get_language() == 'en' and self.description_en:
            r = self.description_en
        return r.split('. ')[0] + '.'

    @property
    def min_current_amount(self):
        return self.amount_on_date(now())

    def amount_on_date(self, on_date, guests=None):
        result = PlacePrice.objects.filter(settlement__room=self, settlement__enabled=True, date=on_date).\
            aggregate(Min('amount'))
        amount = result['amount__min']
        if amount:
            return amount
        return 0

    def amount_date_guests(self, on_date, guests):
        # noinspection PyBroadException
        try:
            s = SettlementVariant.objects.select_related().filter(room=self, enabled=True, settlement__gte=guests).\
                order_by('settlement')[0]
            return s.amount_on_date(on_date)
        except:
            return None

    def discount_on_date(self, on_date):
        # noinspection PyBroadException
        try:
            return Discount.objects.get(room=self, date=on_date).discount
        except:
            return None

    def settlement_on_date_for_guests(self, on_date, guests):
        result = SettlementVariant.objects.filter(room=self, enabled=True, settlement__gte=guests).\
            aggregate(Min('settlement'))
        return result['settlement__min']

    def active_settlements(self):
        return SettlementVariant.objects.filter(
            room=self, enabled=True).order_by('settlement')

    def get_absolute_url(self):
        return reverse('room_detail',
                       kwargs={
                           'city': self.hotel.city.slug,
                           'slug': self.hotel.slug,
                           'pk': self.pk
                       })

    def active_discounts(self):
        discounts = RoomDiscount.objects.filter(room=self, discount__enabled=True).\
            values_list('discount__pk', flat=True).distinct()
        return Discount.objects.filter(pk__in=discounts).order_by('pk')

    def inactive_discounts(self):
        discounts = RoomDiscount.objects.filter(room=self, discount__enabled=True).\
            values_list('discount__pk', flat=True).distinct()
        return Discount.objects.filter(hotel=self.hotel).exclude(
            pk__in=discounts).order_by('pk')

    @property
    def simple_discount(self):
        result, created = SimpleDiscount.objects.get_or_create(room=self)
        return result
コード例 #23
0
class Hotel(AbstractName, AbstractGeo, HotelPoints):
    register_date = models.DateTimeField(_("Register from"), default=now)
    email = models.CharField(verbose_name=_("Email"),
                             blank=True,
                             max_length=75)
    phone = models.CharField(max_length=100,
                             verbose_name=_('Phone'),
                             blank=True)
    fax = models.CharField(max_length=100, verbose_name=_('Fax'), blank=True)
    website = models.URLField(max_length=150,
                              verbose_name=_('Website'),
                              blank=True)
    contact_email = models.CharField(verbose_name=_("Contact Email"),
                                     blank=True,
                                     max_length=75)
    contact_name = models.CharField(max_length=100,
                                    verbose_name=_('Contact Name'),
                                    blank=True)
    room_count = models.IntegerField(_('Count of Rooms'),
                                     blank=True,
                                     default=0)
    option = models.ManyToManyField(HotelOption,
                                    verbose_name=_('Hotel Options'),
                                    blank=True)
    starcount = models.IntegerField(_("Count of Stars"),
                                    choices=STAR_CHOICES,
                                    default=UNKNOWN_STAR,
                                    db_index=True)
    choice = models.IntegerField(_("Type of Hotel"),
                                 choices=HOTEL_CHOICES,
                                 default=HOTEL_HOTEL,
                                 editable=False,
                                 db_index=True)
    admins = models.ManyToManyField(settings.AUTH_USER_MODEL,
                                    verbose_name=_('Hotel Admins'),
                                    blank=True)
    point = models.DecimalField(_("Point of hotel"),
                                editable=False,
                                default=0,
                                decimal_places=1,
                                max_digits=4,
                                db_index=True)
    best_offer = models.BooleanField(verbose_name=_("Best offer"),
                                     default=False,
                                     db_index=True)
    in_top10 = models.BooleanField(verbose_name=_("In top 10"),
                                   default=False,
                                   db_index=True)
    current_amount = models.DecimalField(verbose_name=_('Current amount'),
                                         default=0,
                                         max_digits=20,
                                         decimal_places=3,
                                         db_index=True)
    booking_terms = models.TextField(verbose_name=_("Booking terms"),
                                     blank=True)
    schema_transit = models.TextField(verbose_name=_("Schema of transit"),
                                      blank=True)
    booking_terms_en = models.TextField(
        verbose_name=_("Booking terms(English)"), blank=True)
    schema_transit_en = models.TextField(
        verbose_name=_("Schema of transit(English)"), blank=True)
    payment_method = models.ManyToManyField(PaymentMethod,
                                            verbose_name=_('Payment methods'),
                                            blank=True)
    updated_date = models.DateTimeField(_("Updated date"),
                                        null=True,
                                        blank=True)
    condition_cancellation = models.TextField(
        verbose_name=_("Condition cancellation"), blank=True)
    condition_cancellation_en = models.TextField(
        verbose_name=_("Condition cancellation(English)"), blank=True)
    paid_services = models.TextField(verbose_name=_("Paid services"),
                                     blank=True)
    paid_services_en = models.TextField(
        verbose_name=_("Paid services(English)"), blank=True)
    time_on = models.CharField(max_length=5,
                               verbose_name=_('Time on'),
                               blank=True)
    time_off = models.CharField(max_length=5,
                                verbose_name=_('Time off'),
                                blank=True)
    work_on_request = models.BooleanField(verbose_name=_("Work on request"),
                                          default=False,
                                          db_index=True)
    hoteltype = models.ForeignKey(HotelType,
                                  verbose_name=_('Hotel type'),
                                  null=True,
                                  blank=True,
                                  db_index=True)
    addon_city = models.ForeignKey(City,
                                   verbose_name=_('Main city'),
                                   related_name='main_city',
                                   null=True,
                                   blank=True,
                                   db_index=True)

    class Meta:
        verbose_name = _("Hotel")
        verbose_name_plural = _("Hotels")
        ordering = ("name", )

    objects = Manager()

    def get_address(self):
        if get_language() == 'en':
            if self.address_en:
                return self.address_en
        return self.address

    def get_schema_transit(self):
        if get_language() == 'en':
            if self.schema_transit_en:
                return self.schema_transit_en
        return self.schema_transit

    def get_booking_terms(self):
        if get_language() == 'en':
            if self.booking_terms_en:
                return self.booking_terms_en
        return self.booking_terms

    def get_condition_cancellation(self):
        if get_language() == 'en':
            if self.condition_cancellation_en:
                return self.condition_cancellation_en
        return self.condition_cancellation

    def get_paid_services(self):
        if get_language() == 'en':
            if self.paid_services_en:
                return self.paid_services_en
        return self.paid_services

    @property
    def metadesc(self):
        r = self.description
        if get_language() == 'en' and self.description_en:
            r = self.description_en
        return r.split('. ')[0] + '.'

    def get_count_stars_hotels(self):
        qs = Hotel.objects.filter(city=self.city)
        two = qs(starcount=TWO_STAR).count()
        three = qs(starcount=THREE_STAR).count()
        four = qs(starcount=FOUR_STAR).count()
        five = qs(starcount=FIVE_STAR).count()
        return [two, three, four, five]

    def fulladdress(self):
        return "%s, %s" % (self.address, self.city.name)

    def in_city(self):
        return Hotel.objects.filter(city=self.city).count()

    def in_system(self):
        return Hotel.objects.all().count()

    def stars(self):
        if self.starcount == -10:
            return None
        elif self.starcount == -1:
            return 'apartaments'
        elif self.starcount == -2:
            return 'hostel'
        elif not self.starcount:
            return 'mini'
        else:
            return range(0, int(self.starcount))

    def all_room_options(self):
        return RoomOption.objects.filter(
            enabled=True, room__hotel=self).select_related().order_by(
                'category', 'position', 'name').distinct()

    def get_absolute_url(self):
        return reverse('hotel_detail',
                       kwargs={
                           'city': self.city.slug,
                           'slug': self.slug
                       })

    def get_cabinet_url(self):
        return reverse('cabinet_info',
                       kwargs={
                           'city': self.city.slug,
                           'slug': self.slug
                       })

    def get_current_percent(self):
        try:
            return AgentPercent.objects.filter(hotel=self).filter(
                date__lte=now()).order_by('-date')[0].percent
        except IndexError as ierr:
            return None

    def get_percent_on_date(self, on_date):
        return AgentPercent.objects.filter(hotel=self).filter(
            date__lte=on_date).order_by('-date')[0].percent

    @property
    def min_current_amount(self):
        return self.amount_on_date(now())

    def amount_on_date(self, on_date):
        result = PlacePrice.objects.filter(settlement__room__hotel=self, settlement__enabled=True, date=on_date).\
            aggregate(Min('amount'))
        amount = result['amount__min']
        if amount:
            return amount
        return 0

    def save(self, *args, **kwargs):
        if not self.slug:
            if not self.pk:
                super(Hotel, self).save(*args, **kwargs)
            self.slug = self.pk
        else:
            self.slug = self.slug.strip().replace(' ', '-')
            if Hotel.objects.filter(
                    slug=self.slug,
                    city=self.city).exclude(pk=self.pk).count():
                self.slug = self.pk
        self.updated_date = now()
        super(Hotel, self).save(*args, **kwargs)

    def update_hotel_amount(self):
        amount = self.min_current_amount
        if amount:
            self.current_amount = amount
        else:
            self.current_amount = 0
        self.save()

    def tourism_places(self):
        places = Tourism.objects.raw(
            places_near_object(self, settings.TOURISM_PLACES_RADIUS,
                               'address_tourism'))
        all_places = []
        for p in places:
            all_places.append(p.id)
        return Tourism.objects.filter(pk__in=all_places).order_by('category')

    def complete_booking_users_id(self):
        # TODO Check status of bookings
        users_id = Booking.objects.filter(hotel=self).values_list('user',
                                                                  flat=True)
        return users_id

    def __str__(self):
        # noinspection PyBroadException
        try:
            return _("%(hotel)s :: %(city)s") % {
                'hotel': self.get_name,
                'city': self.city.get_name,
            }
        except:
            return self.name

    def available_rooms_for_guests_in_period(self, guests, from_date, to_date):
        # Find available rooms for this guests count and for searched dates
        need_days = (to_date - from_date).days
        date_period = (from_date, to_date - timedelta(days=1))
        rooms_with_amount = SettlementVariant.objects.filter(enabled=True, settlement__gte=guests,
            room__hotel=self, placeprice__date__range=date_period, placeprice__amount__gt=0).\
            annotate(num_days=Count('pk')).\
            filter(num_days__gte=need_days).order_by('room__pk').values_list('room__pk', flat=True).distinct()
        room_not_avail = Room.objects.filter(pk__in=rooms_with_amount,
            availability__date__range=date_period, availability__min_days__gt=need_days).\
            annotate(num_days=Count('pk')).filter(num_days__gt=0).order_by('pk').\
            values_list('pk', flat=True).distinct()
        rooms = Room.objects.exclude(pk__in=room_not_avail).filter(pk__in=rooms_with_amount,
            availability__date__range=date_period, availability__placecount__gt=0).\
            annotate(num_days=Count('pk')).filter(num_days__gte=need_days)
        return rooms
コード例 #24
0
ファイル: test_backends.py プロジェクト: ercpe/phylter
 def test_get_backend(self):
     assert isinstance(get_backend(QuerySet()), DjangoBackend)
     assert isinstance(get_backend(Manager()), DjangoBackend)
コード例 #25
0
 class InvalidModel(TranslatableModel):
     translations = TranslatedFields(translated=models.CharField(
         max_length=250))
     object = Manager()
コード例 #26
0
class ModelWithMultipleManagers(models.Model):
    gender = models.SmallIntegerField()
    objects = Manager()
    men = MenManager()
    women = WomenManager()
コード例 #27
0
class Booking(MoneyBase, AbstractIP):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             verbose_name=_('User'),
                             blank=True,
                             null=True)
    date = models.DateTimeField(verbose_name=_("Creation date"), default=now)
    system_id = models.IntegerField(_("ID in system"), default=0)
    from_date = models.DateField(_("From"))
    to_date = models.DateField(_("To"))
    settlement = models.ForeignKey(SettlementVariant,
                                   verbose_name=_('Settlement Variant'),
                                   null=True,
                                   on_delete=models.SET_NULL)
    settlement_txt = models.CharField(
        verbose_name=_("Settlement Variant in text"),
        max_length=255,
        blank=True)
    hotel = models.ForeignKey(Hotel,
                              verbose_name=_('Hotel'),
                              blank=True,
                              null=True,
                              on_delete=models.SET_NULL)
    hotel_txt = models.CharField(verbose_name=_("Hotel in text"),
                                 max_length=255,
                                 blank=True)
    status = models.IntegerField(_("Booking status"),
                                 choices=STATUS_CHOICES,
                                 default=STATUS_UNKNOWN)
    first_name = models.CharField(verbose_name=_("First name"), max_length=100)
    middle_name = models.CharField(verbose_name=_("Middle name"),
                                   max_length=100,
                                   blank=True)
    last_name = models.CharField(verbose_name=_("Last name"), max_length=100)
    phone = models.CharField(max_length=100,
                             verbose_name=_('Phone'),
                             blank=True)
    email = models.CharField(_('E-mail'), blank=True, max_length=100)
    uuid = models.CharField(verbose_name=_("Unique ID"),
                            max_length=64,
                            blank=True,
                            editable=False)
    commission = models.DecimalField(verbose_name=_('Commission'),
                                     default=0,
                                     max_digits=20,
                                     decimal_places=3)
    hotel_sum = models.DecimalField(verbose_name=_('Hotel Sum'),
                                    default=0,
                                    max_digits=20,
                                    decimal_places=3)
    card_number = models.CharField(verbose_name=_("Card number"),
                                   max_length=16,
                                   blank=True)
    card_valid = models.CharField(verbose_name=_("Card valid to"),
                                  max_length=5,
                                  blank=True)
    card_holder = models.CharField(verbose_name=_("Card holder"),
                                   max_length=50,
                                   blank=True)
    card_cvv2 = models.CharField(
        verbose_name=_("Card verification value(CVV2)"),
        max_length=4,
        blank=True)
    payment_method = models.ForeignKey(PaymentMethod,
                                       verbose_name=_('Payment method'),
                                       null=True)
    enabled = models.BooleanField(verbose_name=_('Enabled'),
                                  default=False,
                                  db_index=True)
    guests = models.PositiveSmallIntegerField(_("Guests"),
                                              db_index=True,
                                              default=0)
    btype = models.IntegerField(_("Booking type"),
                                choices=BOOKING_CHOICES,
                                default=BOOKING_UNKNOWN)
    bdiscount = models.PositiveSmallIntegerField(
        verbose_name=_('Discount percent'), default=0, db_index=True)
    typefood = models.IntegerField(_("Type of food"),
                                   choices=TYPEFOOD,
                                   db_index=True,
                                   null=True)
    freecancel = models.PositiveSmallIntegerField(
        verbose_name=_('Free cancel days'), default=0, db_index=True)
    penaltycancel = models.DecimalField(
        verbose_name=_('Penalty for cancellation'),
        default=0,
        max_digits=20,
        decimal_places=3)
    comment = models.TextField(verbose_name=_("Client comment"),
                               blank=True,
                               default='')
    amount_no_discount = models.DecimalField(
        verbose_name=_('Amount without discount'),
        default=0,
        max_digits=22,
        decimal_places=5,
        db_index=True)
    cancel_time = models.DateTimeField(
        verbose_name=_("Time/date of cancellation"), blank=True, null=True)

    objects = Manager()

    class Meta:
        ordering = ("-date", )
        verbose_name = _("Booking")
        verbose_name_plural = _("Bookings")

    def __str__(self):
        return "Booking - %s" % self.pk

    @property
    def days(self):
        return (self.to_date - self.from_date).days

    @property
    def freecancel_before(self):
        if self.freecancel > 0:
            return self.from_date - timedelta(days=self.freecancel)
        return False

    @property
    def allow_penalty(self):
        if self.freecancel_before and self.hotel and self.btype == BOOKING_GB:
            offset = self.hotel.city.time_offset
            for_time = self.hotel.time_on
            for_time1 = time(int(for_time[:2]), int(for_time[3:5]))
            if now() > datetime.combine(self.freecancel_before,
                                        for_time1) - timedelta(hours=offset):
                return True
        return False

    def get_absolute_url(self):
        if not self.uuid:
            self.save()
        return reverse('booking_hotel_detail', kwargs={'slug': self.uuid})

    def get_client_url(self):
        if not self.uuid:
            self.save()
        return reverse('booking_user_detail', kwargs={'slug': self.uuid})

    @property
    def room_day_cost(self):
        return self.amount / self.days

    @property
    def room_day_cost_no_amount(self):
        if self.amount_no_discount > 0:
            return self.amount_no_discount / self.days
        if self.bdiscount > 0:
            return ((self.amount * 100) / (100 - self.bdiscount)) / self.days
        return self.room_day_cost

    def save(self, *args, **kwargs):
        if not self.uuid:
            self.uuid = uuid4()
        if self.system_id < 1:
            new_id = random.randint(100000000, 999999999)
            while Booking.objects.filter(system_id=new_id).count() > 0:
                new_id = random.randint(100000000, 999999999)
            self.system_id = new_id
        super(Booking, self).save(*args, **kwargs)
コード例 #28
0
ファイル: models.py プロジェクト: KarlSoftware/moscowpython
class Event(StatusModel):
    """ Events
        * draft - totally invisible
        * planning - only event description is shown
        * active - event is scheduled, speakers also visible
        * archived - event passed, registration is disabled
    """
    STATUS = Choices(
        'planning',
        'active',
        'archived',
        'draft',
    )

    name = models.CharField(u'Название', max_length=1024)
    number = models.SmallIntegerField(u'Номер', blank=True, null=True)
    description = models.TextField(u'Описание', blank=True)
    image = models.ImageField(u'Изображение',
                              upload_to='events',
                              null=True,
                              blank=True)
    date = models.DateTimeField(u'Начало', blank=True, null=True)
    venue = models.ForeignKey('Venue', blank=True, null=True)
    sponsors = models.ManyToManyField('Sponsor',
                                      verbose_name=u'Спонсоры',
                                      blank=True)
    registration_link = models.URLField(u'Ссылка на событие', blank=True)
    streaming_url = models.URLField(u'Ссылка на трансляцию', blank=True)
    streaming_embed = models.TextField(
        u'Embed трансляции',
        blank=True,
        help_text='html с ютуба или другого источника')
    manual_on_air = models.NullBooleanField(
        u'Включить трансляцию',
        default=None,
        help_text=u'Включается автоматически за полчаса до начала и идёт 4 часа.'
        u' Нужно, для тестирования в другое время.')

    # Deprecated:
    timepad_id = models.IntegerField(u'ID события на Timepad',
                                     blank=True,
                                     default=0,
                                     editable=False)
    votable = models.BooleanField(u'Включить голосование',
                                  default=False,
                                  editable=False)

    objects = Manager()
    visible = QueryManager(
        status__in=[STATUS.planning, STATUS.active, STATUS.archived])
    future = QueryManager(status__in=[STATUS.planning, STATUS.active])

    def __str__(self):
        if self.number:
            return u'{0} №{1}'.format(self.name, self.number)
        else:
            return self.name

    def __repr__(self):
        return '<Event №%s>' % self.number

    @permalink
    def get_absolute_url(self):
        return 'event', [self.number]

    @property
    def is_active(self):
        return self.status == self.STATUS.active

    def days_delta(self):
        if not self.date:
            return None
        delta = (self.date.date() - datetime.datetime.today().date()).days
        if delta < 0:
            return None  # passed
        if delta >= 0:
            return delta

    @property
    def on_air(self):
        if self.manual_on_air is not None:
            return self.manual_on_air
        datetime_start = self.date - datetime.timedelta(minutes=30)
        datetime_stop = self.date + datetime.timedelta(
            hours=4)  # Actually meetups are not that long
        return datetime_start <= datetime.datetime.now() <= datetime_stop

    def get_registration_url(self):
        if self.timepad_id:
            return 'https://moscowdjango.timepad.ru/event/%s/' % self.timepad_id
        if self.registration_link:
            return self.registration_link

    @classmethod
    def spotlight(cls, with_drafts=False):
        """ Last active or last planned or last archived
        """
        try:
            if with_drafts:
                return Event.objects.latest()
            return Event.future.latest()
        except Event.DoesNotExist:
            return None

    class Meta:
        verbose_name = u'Событие'
        verbose_name_plural = u'События'
        get_latest_by = 'number'
        ordering = ['-date']
コード例 #29
0
ファイル: models.py プロジェクト: ukaoma/nnmware
class Booking(MoneyBase, AbstractIP):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('User'), blank=True, null=True)
    date = models.DateTimeField(verbose_name=_("Creation date"), default=now)
    system_id = models.IntegerField(_("ID in system"), default=0)
    from_date = models.DateField(_("From"))
    to_date = models.DateField(_("To"))
    settlement = models.ForeignKey(SettlementVariant, verbose_name=_('Settlement Variant'), null=True,
                                   on_delete=models.SET_NULL)
    settlement_txt = models.CharField(verbose_name=_("Settlement Variant in text"), max_length=255, blank=True)
    hotel = models.ForeignKey(Hotel, verbose_name=_('Hotel'), blank=True, null=True, on_delete=models.SET_NULL)
    hotel_txt = models.CharField(verbose_name=_("Hotel in text"), max_length=255, blank=True)
    status = models.IntegerField(_("Booking status"), choices=STATUS_CHOICES, default=STATUS_UNKNOWN)
    first_name = models.CharField(verbose_name=_("First name"), max_length=100)
    middle_name = models.CharField(verbose_name=_("Middle name"), max_length=100, blank=True)
    last_name = models.CharField(verbose_name=_("Last name"), max_length=100)
    phone = models.CharField(max_length=100, verbose_name=_('Phone'), blank=True)
    email = models.CharField(_('E-mail'), blank=True, max_length=100)
    uuid = models.CharField(verbose_name=_("Unique ID"), max_length=64, blank=True, editable=False)
    commission = models.DecimalField(verbose_name=_('Commission'), default=0, max_digits=20, decimal_places=3)
    hotel_sum = models.DecimalField(verbose_name=_('Hotel Sum'), default=0, max_digits=20, decimal_places=3)
    card_number = models.CharField(verbose_name=_("Card number"), max_length=16, blank=True)
    card_valid = models.CharField(verbose_name=_("Card valid to"), max_length=5, blank=True)
    card_holder = models.CharField(verbose_name=_("Card holder"), max_length=50, blank=True)
    card_cvv2 = models.CharField(verbose_name=_("Card verification value(CVV2)"), max_length=4, blank=True)
    payment_method = models.ForeignKey(PaymentMethod, verbose_name=_('Payment method'))
    enabled = models.BooleanField(verbose_name=_('Enabled'), default=False, db_index=True)
    guests = models.PositiveSmallIntegerField(_("Guests"), db_index=True, default=0)

    objects = Manager()

    class Meta:
        ordering = ("-date",)
        verbose_name = _("Booking")
        verbose_name_plural = _("Bookings")

    def __str__(self):
        return "Booking - %s" % self.pk

    @property
    def days(self):
        return (self.to_date - self.from_date).days

    @permalink
    def get_absolute_url(self):
        if not self.uuid:
            self.save()
        return 'booking_hotel_detail', (), {'slug': self.uuid}

    @permalink
    def get_client_url(self):
        if not self.uuid:
            self.save()
        return 'booking_user_detail', (), {'slug': self.uuid}

    @property
    def days(self):
        delta = self.to_date - self.from_date
        return delta.days

    def save(self, *args, **kwargs):
        if not self.uuid:
            self.uuid = uuid4()
        if self.system_id < 1:
            new_id = random.randint(100000000, 999999999)
            while Booking.objects.filter(system_id=new_id).count() > 0:
                new_id = random.randint(100000000, 999999999)
            self.system_id = new_id
        super(Booking, self).save(*args, **kwargs)
コード例 #30
0
def clean_orphans(output_log=True, delete=False):
    """ Supprimer les fichiers orphelins du répertoire MEDIA """
    from django.contrib.contenttypes.fields import ContentType
    # Configuration
    dirs = settings.ORPHAN_CHECK_DIRS
    apps = settings.ORPHAN_CHECK_APPS
    fields, db_files, deletable = [], [], []
    counter, deleted = 0, 0
    # Trouver tous les champs FileField
    for model in ContentType.objects.filter(app_label__in=apps):
        model_class = model.model_class()
        model_class.add_to_class('all_objects', Manager())
        for field in model_class._meta.fields:
            if field.get_internal_type(
            ) == 'FileField' and not model_class._meta.abstract:
                fields.append(
                    [model_class, field.name, model_class._meta.object_name])
    # Recenser tous les liens vers des fichiers
    for field in fields:
        model, field_name = field[0], field[1]
        files = model.all_objects.exclude(**{
            field_name: ''
        }).distinct().values_list(field_name, flat=True)
        files = [join(settings.MEDIA_ROOT, item) for item in files if item]

        # Supprimer les entrées liées à un fichier non existant
        for name in files:
            if not default_storage.exists(name):
                relative_name = relpath(name, settings.MEDIA_ROOT)
                with default_storage.open(name, 'w'):
                    pass  # Créer le fichier pour éviter une erreur lors de la suppression de l'instance
                queryset = model.all_objects.filter(
                    **{field_name: relative_name})
                queryset.delete()
                default_storage.delete(name)
                deleted += 1

        db_files += files
    # Parcourir tous les fichiers
    for directory in dirs:
        for root, _dummy, filenames in os.walk(
                join(settings.MEDIA_ROOT, directory)):
            for filename in filenames:
                filepath = join(root, filename)
                counter += 1
                if filepath not in db_files:
                    deletable.append(filepath)
                    deleted += 1
    # Supprimer les fichiers si demandé
    if delete is True:
        for item in deletable:
            try:
                default_storage.remove(item)
            except (OSError, IOError):
                deleted -= 1
    # Sortie de journalisation
    if output_log is True:
        output = render_to_string(
            'core/view/orphan-log.txt', {
                'counter': counter,
                'deleted': deleted,
                'files_delete': deletable,
                'files': db_files,
                'fields': fields
            })
        logger.info(output)
        print(output)
        return output