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