WIP
This commit is contained in:
@ -1090,3 +1090,99 @@ class Automation(ExportModelOperationsMixin('automations'), models.Model, Permis
|
||||
|
||||
objects = ScopedManager(space='space')
|
||||
space = models.ForeignKey(Space, on_delete=models.CASCADE)
|
||||
|
||||
|
||||
class ModelFilter(models.Model):
|
||||
EQUAL = 'EQUAL'
|
||||
NOT_EQUAL = 'NOT_EQUAL'
|
||||
LESS_THAN = 'LESS_THAN'
|
||||
GREATER_THAN = 'GREATER_THAN'
|
||||
LESS_THAN_EQ = 'LESS_THAN_EQ'
|
||||
GREATER_THAN_EQ = 'GREATER_THAN_EQ'
|
||||
CONTAINS = 'CONTAINS'
|
||||
NOT_CONTAINS = 'NOT_CONTAINS'
|
||||
STARTS_WITH = 'STARTS_WITH'
|
||||
NOT_STARTS_WITH = 'NOT_STARTS_WITH'
|
||||
ENDS_WITH = 'ENDS_WITH'
|
||||
NOT_ENDS_WITH = 'NOT_ENDS_WITH'
|
||||
INCLUDES = 'INCLUDES'
|
||||
NOT_INCLUDES = 'NOT_INCLUDES'
|
||||
COUNT_EQ = 'COUNT_EQ'
|
||||
COUNT_NEQ = 'COUNT_NEQ'
|
||||
COUNT_LT = 'COUNT_LT'
|
||||
COUNT_GT = 'COUNT_GT'
|
||||
|
||||
OPERATION = (
|
||||
(EQUAL, _('is')),
|
||||
(NOT_EQUAL, _('is not')),
|
||||
(LESS_THAN, _('less than')),
|
||||
(GREATER_THAN, _('greater than')),
|
||||
(LESS_THAN_EQ, _('less or equal')),
|
||||
(GREATER_THAN_EQ, _('greater or equal')),
|
||||
(CONTAINS, _('contains')),
|
||||
(NOT_CONTAINS, _('does not contain')),
|
||||
(STARTS_WITH, _('starts with')),
|
||||
(NOT_STARTS_WITH, _('does not start with')),
|
||||
(INCLUDES, _('includes')),
|
||||
(NOT_INCLUDES, _('does not include')),
|
||||
(COUNT_EQ, _('count equals')),
|
||||
(COUNT_NEQ, _('count does not equal')),
|
||||
(COUNT_LT, _('count less than')),
|
||||
(COUNT_GT, _('count greater than')),
|
||||
)
|
||||
|
||||
STRING = 'STRING'
|
||||
NUMBER = 'NUMBER'
|
||||
BOOLEAN = 'BOOLEAN'
|
||||
DATE = 'DATE'
|
||||
|
||||
FIELD_TYPE = (
|
||||
(STRING, _('string')),
|
||||
(NUMBER, _('number')),
|
||||
(BOOLEAN, _('boolean')),
|
||||
(DATE, _('date')),
|
||||
)
|
||||
|
||||
field = models.CharField(max_length=32)
|
||||
field_type = models.CharField(max_length=32, choices=(FIELD_TYPE))
|
||||
operation = models.CharField(max_length=32, choices=(OPERATION))
|
||||
target_value = models.CharField(max_length=128)
|
||||
sort = models.BooleanField(default=False,)
|
||||
ascending = models.BooleanField(default=True,)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.field} - {self.operation} - {self.target_value}"
|
||||
|
||||
|
||||
class SavedFilter(models.Model, PermissionModelMixin):
|
||||
FOOD = 'FOOD'
|
||||
UNIT = 'UNIT'
|
||||
KEYWORD = "KEYWORD"
|
||||
RECIPE = 'RECIPE'
|
||||
BOOK = 'BOOK'
|
||||
|
||||
MODELS = (
|
||||
(FOOD, _('Food')),
|
||||
(UNIT, _('Unit')),
|
||||
(KEYWORD, _('Keyword')),
|
||||
(RECIPE, _('Recipe')),
|
||||
(BOOK, _('Book'))
|
||||
)
|
||||
|
||||
name = models.CharField(max_length=128, )
|
||||
type = models.CharField(max_length=24, choices=(MODELS)),
|
||||
description = models.CharField(max_length=256, blank=True)
|
||||
shared = models.ManyToManyField(User, blank=True, related_name='filter_share')
|
||||
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
filter = models.ForeignKey(ModelFilter, on_delete=models.PROTECT, null=True)
|
||||
|
||||
objects = ScopedManager(space='space')
|
||||
space = models.ForeignKey(Space, on_delete=models.CASCADE)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.type}: {self.name}"
|
||||
|
||||
class Meta:
|
||||
constraints = [
|
||||
models.UniqueConstraint(fields=['space', 'name'], name='sf_unique_name_per_space')
|
||||
]
|
||||
|
Reference in New Issue
Block a user