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'),