AttributeError: объект 'str' не имеет атрибута 'build_absolute_uri'
Я получаю следующую ошибку, когда использую функцию get_creds_url
для построения URL. Я хочу добавить credentials\
к URL.
return request.build_absolute_uri(url)
AttributeError: 'str' object has no attribute 'build_absolute_uri'
get_creds_url
функция:
def get_creds_url(self, request=None):
return reverse('api:workflow_job_template_detail', kwargs={'pk': self.pk}, request=request)
Вот обратная функция, которая импортируется из другого файла.
Я не уверен, могу ли я модифицировать обратную функцию для добавления credentials/
строки. Если это можно сделать, пожалуйста, подскажите.
def drf_reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra):
"""
Copy and monkey-patch `rest_framework.reverse.reverse` to prevent adding unwarranted
query string parameters.
"""
scheme = getattr(request, 'versioning_scheme', None)
if scheme is not None:
try:
url = scheme.reverse(viewname, args, kwargs, request, format, **extra)
except NoReverseMatch:
# In case the versioning scheme reversal fails, fallback to the
# default implementation
url = _reverse(viewname, args, kwargs, request, format, **extra)
else:
url = _reverse(viewname, args, kwargs, request, format, **extra)
return url
def reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra):
if request is None or getattr(request, 'version', None) is None:
# We need the "current request" to determine the correct version to
# prepend to reverse URLs. If there is no "current request", assume
# the latest API version.
if kwargs is None:
kwargs = {}
if 'version' not in kwargs:
kwargs['version'] = settings.REST_FRAMEWORK['DEFAULT_VERSION']
return drf_reverse(viewname, args, kwargs, request, format, **extra)
class URLPathVersioning(BaseVersioning):
def reverse(self, viewname, args=None, kwargs=None, request=None, format=None, **extra):
if request.version is not None:
kwargs = {} if (kwargs is None) else kwargs
kwargs[self.version_param] = request.version
request = None
return super(BaseVersioning, self).reverse(
viewname, args, kwargs, request, format, **extra
)
Вот пример того, как вызывается функция.
if obj.workflow_job_template:
res['credentials'] = obj.workflow_job_template.get_creds_url(self.context.get('request').path + "credentials/")