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(__name__) 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=content, allow_unicode=True, max_length=88, word_boundary=True, save_order=True, regex_pattern=r"/", ) 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 logger.debug( f"get_slug_fields: lookup_value_path is {lookup_value_path} and attr is {attr}" ) for elem in lookup_value_path: try: attr = getattr(attr, elem) except AttributeError: attr = "" if callable(attr): return f"{attr()}" return attr