django ValueError at / Field 'id'需要一个数字,但得到的是'srednje'

hs1ihplo  于 2022-12-14  发布在  Go
关注(0)|答案(1)|浏览(114)

我有django应用程序。我希望用户在浏览器中键入特定文章名称的网址,然后他们会看到链接到这篇文章的所有产品。我的模型看起来像这样:

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)

我试着从我的Angular 来看待这个作品:

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

我想这可能与主键或外键有某种联系,但我如何才能改变它呢?

xghobddn

xghobddn1#

在您的视图中,您必须将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'),

相关问题