**Fixes**: 1) Remove redundant `slugify` import from `core/models.py`; **Extra**: 1) Update `poetry.lock` and `pyproject.toml` to lock `python-slugify@8.0.4` and refine dependency definitions; 2) Improve readability of debug logging in `TweakedAutoSlugField`.
53 lines
1.4 KiB
Python
53 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(__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
|