Django - Ошибка при просмотре HTML шаблона с автогенерируемой URL ссылкой на функцию просмотра

Я перечисляю кучу товаров, и в шаблоне HTML он содержит URL ссылку на отдельный товар (ссылка генерируется автоматически), но я получаю эту ошибку при просмотре страницы:

reverse for 'producer_detail' with arguments '('itemxxx', datetime.datetime(1980, 1, 1, 0, 0, tzinfo=<UTC>))' not found. 1 pattern(s) tried: ['producers/(?P<pk>[^/]+)/\\Z']

В таблице есть UniqueConstraint, поскольку существует несколько предметов с одинаковым именем_владельца.

owner_name = models.CharField(max_length=12, primary_key=True)
logo_svg = models.CharField(max_length=100, blank=True, null=True)
account_name = models.CharField(max_length=12, blank=True, null=True)
metasnapshot_date = models.DateTimeField(blank=True, null=True)

constraints = [
            models.UniqueConstraint(
                fields=['owner_name', 'metasnapshot_date'],
                name="producer_idx",
            )
        ]

urlpatterns = [
    path("", views.producer_index, name="producer_index"),
    path("<str:pk>/", views.producer_detail, name="producer_detail"),
]

Мои взгляды

def producer_index(request):
     producers = Producer.objects.all()
     context = {
         'producers': producers
     }
     print(producers)
     return render(request, 'producer_index.html', context)
    
def producer_detail(request, pk, metasnapshot_date):
     producer = Producer.objects.filter(pk=pk,metasnapshot_date=metasnapshot_date)
     context = {
         'producer': producer
     }
     return render(request, 'producer_detail.html', context)

Мой HTML шаблон для просмотра всех товаров

{% extends "base.html" %}
 {% load static %}
 {% block page_content %}
 <h1>Producers</h1>
 <div class="row">
 {% for producer in producers %}
     <div class="col-md-4">
         <div class="card mb-2">
             <img class="card-img-top" src="{{ producer.logo_svg }}">
            <div class="card-body">
                <h5 class="card-title">{{ producer.owner_name }}</h5>
                <p class="card-text">{{ producer.url }}</p>
                 <a href="{% url 'producer_detail' producer.pk producer.metasnapshot_date %}"
                   class="btn btn-primary">
                    Read More
                </a>

            </div>
        </div>
    </div>
    {% endfor %}
</div>
{% endblock %}

Проблема, как мне кажется:

Мое предположение, что он не фильтрует должным образом до одного элемента. Я довольно новичок в Django, поэтому не уверен, правильно ли настроено мое представление.

Вы просто забыли передать metasnapshot_date to the url
. измените это

urlpatterns = [
    path("", views.producer_index, name="producer_index"),
    path("<str:pk>/", views.producer_detail, name="producer_detail"),
]

To

urlpatterns = [
    path("", views.producer_index, name="producer_index"),
    path("<str:pk>/<date:metasnapshot_date>/", views.producer_detail, name="producer_detail"),
]

Update

from django.shortcuts import get_object_or_404
def producer_detail(request, pk, metasnapshot_date):
     producer = get_object_or_404(Producer,pk=pk,metasnapshot_date=metasnapshot_date)
     context = {
         'producer': producer
     }
     return render(request, 'producer_detail.html', context)
Вернуться на верх