python - Django 对象过滤器预期 id (int) 但得到 str
问题描述
我制作了 Django 博客项目,并实现了一个按标签过滤帖子的功能。可以选择某个标签并查看带有该特定标签的所有帖子。但是当我想按此标签过滤所有帖子时遇到麻烦。我收到一个错误,Django 需要 int number 但不是 str。如何解决这个问题呢?
这是我的代码
models.py
class Tag(models.Model):
name = models.CharField(max_length=200, null=True)
slug = models.SlugField(max_length=250, unique=True, editable=False)
class ProjectPost(models.Model):
tag = models.ForeignKey(Tag, on_delete=models.PROTECT)
url.py
urlpatterns = [
...
path("projects/", views.projects, name='projects'),
path('projects/<slug:tag>/',views.projects, name='projects_tag'),
]
views.py
def projects(request, tag=None):
if tag is not None:
ProjectPost.objects.filter(tag=tag)
else:
posts = ProjectPost.objects.all()
tags = Tag.objects.all()
context = {'posts':posts, 'tags':tags}
return render(request, 'website/projects.html', context)
这是错误
ValueError at /projects/romania/
Field 'id' expected a number but got 'romania'.
Request Method: GET
Request URL: http://127.0.0.1:8000/projects/romania/
Django Version: 3.2.5
Exception Type: ValueError
Exception Value:
Field 'id' expected a number but got 'romania'.
Exception Location: /home/cristian/Desktop/GreatEcology my project/ecosite/venvecosite/lib/python3.8/site-packages/django/db/models/fields/__init__.py, line 1825, in get_prep_value
Python Executable: /home/cristian/Desktop/GreatEcology my project/ecosite/venvecosite/bin/python
Python Version: 3.8.5
Python Path:
['/home/cristian/Desktop/GreatEcology my project/ecosite/ecowebsite',
'/home/cristian/Anaconda3/lib/python38.zip',
'/home/cristian/Anaconda3/lib/python3.8',
'/home/cristian/Anaconda3/lib/python3.8/lib-dynload',
'/home/cristian/Desktop/GreatEcology my '
'project/ecosite/venvecosite/lib/python3.8/site-packages']
Server time: Wed, 21 Jul 2021 14:36:51 +0000
解决方案
我猜你在你的tag
变量中得到标签的名字,所以只需用这个名字过滤
def projects(request, tag=None):
if tag:
posts = ProjectPost.objects.filter(tag__name=tag)
else:
posts = ProjectPost.objects.all()
...
推荐阅读
- docker - Docker 构建卡在 Windows 10 中涉及的大型图像中
- javascript - 如何通过发送授权数据(JWT 令牌)在反应应用程序中呈现 iframe?这种方式正确吗?iframe 有替代品吗?
- r - 将向量切割成不同长度的箱,然后在 r 中为它们分配值/名称
- android - 如何在单例中正确使用协程
- java - 从 JAVA 项目文件夹将 CSV 导入 MYSQL
- python - Python 性能:While 与 For 循环
- pine-script - Pinescript:是否可以根据颜色创建条件?
- python - 如何使用 PyWin32 模块删除 Excel 中的总计和小计?
- amazon-web-services - Amazon cli 映像不适用于 Gitlab CI
- php - 如何使用 Doctrine 在几列上执行 WHERE 子句?