schon/core/utils/db.py
Egor fureunoir Gorbunov 83cad6c1cc Features: 1) Update all logger instances across the codebase to use "evibes" instead of "django";
Fixes: 1) None;

Extra: 1) Enhance consistency in logging configuration and improve alignment with project-specific naming conventions.
2025-06-30 01:44:20 +03:00

51 lines
1.4 KiB
Python

import logging
from django.db.models import Model
from django.db.models.constants import LOOKUP_SEP
from django.utils.translation import gettext_lazy as _
from django_extensions.db.fields import AutoSlugField
from slugify import slugify
logger = logging.getLogger("evibes")
def list_to_queryset(model: Model, data: list):
if not isinstance(model, Model):
raise ValueError(_(f"{model} must be model"))
if not isinstance(data, list):
raise ValueError(_(f"{data} must be list object"))
pk_list = [obj.pk for obj in data]
return model.objects.filter(pk__in=pk_list)
def unicode_slugify_function(content):
return slugify(
text=str(content),
allow_unicode=True,
max_length=88,
word_boundary=True,
save_order=True,
regex_pattern=r"(?:[^\w-]|_)+",
separator="-",
)
class TweakedAutoSlugField(AutoSlugField):
def get_slug_fields(self, model_instance, lookup_value):
if callable(lookup_value):
return f"{lookup_value(model_instance)}"
lookup_value_path = lookup_value.split(LOOKUP_SEP)
attr = model_instance
for elem in lookup_value_path:
try:
attr = getattr(attr, elem)
except AttributeError:
attr = ""
if callable(attr):
# noinspection PyCallingNonCallable
return f"{attr()}"
return attr