Source code for disbi.disbimodels

"""
Normal Django models with a few custom options for configuration.

If you have custom model classes that need these options, add them here and
create a child class of the appropriate options class and your custom model class.
"""
# Django
from django.db import models


[docs]class Options(): def __init__(self, di_show=False, di_display_name=None, di_hr_primary_key=False, di_choose=False, di_combinable=False, *args, **kwargs): """ Custom options for DISBi fields. Args: di_show (bool): Determines whether the column should be included in the result table. di_display_name (str): Will be used as column header in the result table. di_hr_primary_key (bool): Determines whether the column should be used for identifying rows. If true column must be unique and may not be `null` or `blank`. Only one di_hr_primary_key is allowed per model. TODO: enforce this """ self.di_show = di_show self.di_display_name = di_display_name self.di_hr_primary_key = di_hr_primary_key self.di_choose = di_choose self.di_combinable = di_combinable super().__init__(*args, **kwargs)
[docs]class RelationshipOptions(): def __init__(self, to, di_show=False, di_display_name=None, di_hr_primary_key=False, di_choose=False, di_combinable=False, *args, **kwargs): """ Custom options for DISBi relationship fields, which have a different signature than normal fields. Args: di_show (bool): Determines whether the column should be included in the result table. di_display_name (str): Will be used as column header in the result table. di_hr_primary_key (bool): Determines whether the column should be used for identifying rows. If true column must be unique and may not be `null` or `blank`. Only one di_hr_primary_key is allowed per model. TODO: enforce this """ self.di_show = di_show self.display_name = di_display_name self.di_hr_primary_key = di_hr_primary_key self.di_choose = di_choose self.di_combinable = di_combinable super().__init__(to, *args, **kwargs)
[docs]class ExcludeOptions(Options): """ Adds the `exclude` option, to exclude rows where this field evaluates to `False`. Should be only used on Bool fields. """ def __init__(self, di_exclude=False, di_show=False, di_display_name=None, di_hr_primary_key=False, di_choose=False, di_combinable=False, *args, **kwargs): self.di_exclude = di_exclude super().__init__(di_show, di_display_name, di_hr_primary_key, di_choose, di_combinable *args, **kwargs)
[docs]class FloatField(Options, models.FloatField): """ FloatField with custom DISBi options. """ pass
[docs]class BigIntegerField(Options, models.BigIntegerField): """ BigIntegerField with custom DISBi options. """ pass
[docs]class BinaryField(Options, models.BinaryField): """ BinaryField with custom DISBi options. """ pass
[docs]class CommaSeparatedIntegerField(Options, models.CommaSeparatedIntegerField): """ CommaSeparatedIntegerField with custom DISBi options. """ pass
[docs]class CharField(Options, models.CharField): """ CharField with custom DISBi options. """ pass
[docs]class DateField(Options, models.DateField): """ DateField with custom DISBi options. """ pass
[docs]class DateTimeField(Options, models.DateTimeField): """ DateTimeField with custom DISBi options. """ pass
[docs]class DecimalField(Options, models.DecimalField): """ DecimalField with custom DISBi options. """ pass
[docs]class DurationField(Options, models.DurationField): """ DurationField with custom DISBi options. """ pass
[docs]class EmailField(Options, models.EmailField): """ EmailField with custom DISBi options. """ pass
[docs]class FileField(Options, models.FileField): """ FileField with custom DISBi options. """ pass
[docs]class FilePathField(Options, models.FilePathField): """ FilePathField with custom DISBi options. """ pass
[docs]class ImageField(Options, models.ImageField): """ ImageField with custom DISBi options. """ pass
[docs]class IntegerField(Options, models.IntegerField): """ IntegerField with custom DISBi options. """ pass
[docs]class GenericIPAddressField(Options, models.GenericIPAddressField): """ GenericIPAddressField with custom DISBi options. """ pass
[docs]class PositiveIntegerField(Options, models.PositiveIntegerField): """ PositiveIntegerField with custom DISBi options. """ pass
[docs]class PositiveSmallIntegerField(Options, models.PositiveSmallIntegerField): """ PositiveSmallIntegerField with custom DISBi options. """ pass
[docs]class SlugField(Options, models.SlugField): """ SlugField with custom DISBi options. """ pass
[docs]class SmallIntegerField(Options, models.SmallIntegerField): """ SmallIntegerField with custom DISBi options. """ pass
[docs]class TextField(Options, models.TextField): """ TextField with custom DISBi options. """ pass
[docs]class TimeField(Options, models.TimeField): """ TimeField with custom DISBi options. """ pass
[docs]class URLField(Options, models.URLField): """ URLField with custom DISBi options. """ pass
[docs]class UUIDField(Options, models.UUIDField): """ UUIDField with custom DISBi options. """ pass
[docs]class ForeignKey(RelationshipOptions, models.ForeignKey): """ ForeignKey with custom DISBi options. """ pass
[docs]class ManyToManyField(RelationshipOptions, models.ManyToManyField): """ ManyToManyField with custom DISBi options. """ pass
[docs]class OneToOneField(RelationshipOptions, models.OneToOneField): """ OneToOneField with custom DISBi options. """ pass
[docs]class NullBooleanField(ExcludeOptions, models.NullBooleanField): """ NullBooleanField with custom DISBi and exclude options. """ pass
[docs]class BooleanField(ExcludeOptions, models.BooleanField): """ BooleanField with custom DISBi and exclude options. """ pass
[docs]class EmptyCharField(Options, models.CharField): """ FloatField with custom DISBi options and the option to add an empty value displayer. """ def __init__(self, di_empty=None, di_show=True, di_display_name=None, di_hr_primary_key=False, di_choose=False, di_combinable=False, *args, **kwargs): self.di_empty = di_empty super().__init__(di_show, di_display_name, di_hr_primary_key, di_choose, di_combinable, *args, **kwargs)