Django template- Если значение DateTimeField, взятое из Foreignkey, передается в url, возникает ошибка: Объект 'str' не имеет атрибута 'strftime'
Я совсем новичок в django и пытаюсь понять, почему я получаю AttributeError: 'str' object has no attribute 'strftime' при передаче объекта datetime в url из DateTimeField() значения через ForeignKey. Вот пример кода, который я использую и пытаюсь передать last_checked значение из Scrape Model.
model.py
class Site(models.Model):
...
class Scrape(models.Model):
...
last_checked = models.DateTimeField(auto_now_add=True)
site = models.ForeignKey(Site, on_delete=models.SET_NULL, related_name='scrapes')
url.py
from django.urls import path, register_converter
from . import views
class DateConverter:
regex = '\d{4}-\d{1,2}-\d{1,2}'
def to_python(self, value):
return datetime.strptime(value, '%Y-%m-%d').date()
def to_url(self, value):
return value.strftime('%Y-%m-%d')
register_converter(DateConverter, 'date')
urlpatterns = [
path('task/<pk>/<date:date_scraped>/', views.scrape_data_csv, name='scrape-csv'),
]
Если я передаю значение непосредственно из Scrape model queryset в template вот так. Все работает отлично!
<a href="{% url 'scrape-csv' site.pk scrape.last.last_checked %}" > </a>
Однако если я передаю значение в Site модель queryset через ForeignKey, что является способом, который мне нужен, здесь возникает ошибка:
{% for site in sites %}
<a href="{% url 'scrape-csv' site.pk site.scrapes.last.last_checked %}" > </a>
{% endfor%}
Если мы проверили значения, то оба одинаковые datetime объекты:
{{ scrape.last.last_checked }} # April 8, 2022, 10:14 a.m.
{{ site.scrapes.last.last_checked }} # April 8, 2022, 10:14 a.m.
Мы можем даже использовать встроенный filter tags просто отлично. Пример:
{{ scrape.last.last_checked | timezone:'US/Eastern'|date:'F d, Y'}} # April 8, 2022
{{ site.scrapes.last.last_checked | timezone:'US/Eastern'|date:'F d, Y'}} # April 8, 2022
Может ли кто-нибудь сказать, почему site.scrapes.last.last_checked приводит к AttributeError: 'str'..., когда это не строка даты?
Если у данного сайта нет ни одного скрапа site.scrapes.last == None, вы получите site.scrapes.last.last_checked как пустую строку в шаблоне