# common/private_files/helpers.py from django.urls import reverse from django.core import signing def build_private_url(app_label: str, model_name: str, pk: int | str, field_name: str, *, sign: bool = True) -> str: params = f"?app={app_label}&model={model_name}&pk={pk}&field={field_name}" if sign: token = signing.dumps( {"app": app_label, "model": model_name, "pk": pk, "field": field_name}, salt="private-files", compress=True, ) params += f"&token={token}" return reverse("private_file_download") + params