This commit is contained in:
smilerz
2022-01-10 15:05:56 -06:00
parent 30683fe455
commit 25ccea90e0
2 changed files with 136 additions and 0 deletions

View File

@ -389,3 +389,43 @@ def old_search(request):
queryset=Recipe.objects.filter(space=request.user.userpreference.space).all().order_by('name'),
space=request.space)
return f.qs
# from django.db.models import fields
# from cookbook.models import Food, Recipe, Keyword, RecipeBook, Unit
# many_to_many = {}
# one_to_many = {}
# many_to_one = {}
# char = {}
# boolean = {}
# number = {}
# other = {}
# image = {}
# date = {}
# for model in [Food, Recipe, Keyword, RecipeBook, Unit]:
# print(name:=model.__name__, ":")
# for x in model._meta.get_fields():
# if x.name in ['space', 'id']:
# continue
# elif x.many_to_many:
# many_to_many[name]=[*many_to_many.get(name, []), x.name]
# elif x.one_to_many:
# one_to_many[name] = [*one_to_many.get(name, []), x.name]
# elif x.many_to_one:
# many_to_one[name] = [*many_to_one.get(name, []), x.name]
# elif isinstance(x, fields.CharField):
# char[name] = [*char.get(name, []), x.name]
# elif isinstance(x, fields.BooleanField):
# boolean[name] = [*boolean.get(name, []), x.name]
# elif isinstance(x, fields.IntegerField) or isinstance(x, fields.DecimalField):
# number[name] = [*number.get(name, []), x.name]
# elif isinstance(x, fields.DateField):
# date[name] = [*date.get(name, []), x.name]
# elif isinstance(x, fields.files.ImageField):
# image[name] = [*image.get(name, []), x.name]
# else:
# other[name] = [*other.get(name, []), x.name]
# if x.hidden:
# hidden[name] = [*hidden.get(name, []), x.name]
# print('---', x.name, ' - ', x.db_type, x.remote_name)

View File

@ -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')
]