ValueError at / Поле 'id' ожидало число, но получило 'srednje'

У меня есть django приложение. Я хочу, чтобы пользователь набрал в браузере url с названием определенной статьи и затем он увидел все товары, связанные с этой статьей. Мои модели выглядят следующим образом:

class Article(models.Model):
    slug = models.SlugField(unique=True, null=True)
    title = models.CharField(max_length=20, null=True)

    def __str__(self):
        return self.title

class Product(models.Model):
    name = models.CharField(max_length=20)
    # price = models.IntegerField()
    description = models.CharField(max_length=400)
    a_article = models.ForeignKey(Article, on_delete=models.CASCADE, null=True)

И я пытаюсь заставить это работать в моем представлении:

def product(request, pk):
    product = models.Product.objects.filter(a_article=pk)
    return render(request, 'product.html')

Поскольку я передал pk в моей функции, я также поместил его в urls:

path('<str:pk>/', views.product, name='product'),

Когда я запускаю это и попадаю на url: http://127.0.0.1:8000/srednje/ я получаю ошибку:

ValueError at /srednje/
Field 'id' expected a number but got 'srednje'.

Я думаю, что это, вероятно, как-то связано с первичным или внешним ключом, но как и каким образом я могу изменить это, чтобы это работало?

В вашем представлении, вы должны изменить строку product на:

product = models.Product.objects.filter(a_article__slug=pk)

если вы хотите получить продукты на основе первичных ключей статей, то вам следует использовать

product = models.Product.objects.filter(a_article__pk=pk)

Рекомендуется использовать имена в соответствии с названием поля, к которому вы обращаетесь. Так, если вы хотите получить данные по названию статьи, рекомендуется использовать:

views.py

def product(request, slug):
    product = models.Product.objects.filter(a_article__slug=slug)
    return render(request, 'product.html')

urls.py

path('<str:slug>/', views.product, name='product'),
Вернуться на верх