【问题标题】:ValueError at / Field 'id' expected a number but got 'srednje'/ Field \'id\' 处的 ValueError 需要一个数字但得到了 \'srednje\'
【发布时间】:2022-12-17 10:03:02
【问题描述】:

我有 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,所以我也把它放在了 url 中:

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'.

我认为这可能以某种方式链接到主键或外键但是我如何以及如何更改它才能工作?

【问题讨论】:

  • 如您所见,错误说明了什么Field 'id' expected a number but got 'srednje'.意味着你已经在你的 url 中传递了 /srednje/ 而不是 id 例如。1,2,3

标签: python django django-models


【解决方案1】:

在您看来,您必须将 product 行更改为:

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

如果你想根据文章主键获取产品,那么你应该使用

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

建议根据您引用的字段名称使用名称。 所以,如果你想通过 article slug 来获取,推荐使用:

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

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多