我想使用Django mptt根据类别过滤帖子列表。 这是我的代码。
models.py
class Post(models.Model):
title = models.CharField(max_length=120)
category = TreeForeignKey('Category', null=True,
blank=True, on_delete=models.CASCADE)
content = models.TextField('Content')
slug = models.SlugField()
def __str__(self):
return self.title
class Category(MPTTModel):
name = models.CharField(max_length=50, unique=True)
parent = TreeForeignKey('self', null=True, blank=True,
related_name='children', db_index=True, on_delete=models.CASCADE)
slug = models.SlugField()
class MPTTMeta:
order_insertion_by = ['name']
class Meta:
unique_together = (('parent', 'slug',))
verbose_name_plural = 'categories'
def __str__(self):
return self.name
views.py
class CategoryView(ListView):
model = Post
template_name = 'apps/category_view.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
post_list = Post.objects.filter(category=self.kwargs.get('category'))
context['category_list'] = post_list
return context
还有urls.py
urlpatterns = [
path('category/<str:category>/',
CategoryView.as_view(), name='category_filter'),
]
此处所有内容均已正确导入,但是当我输入URL时,例如如下所示 http://localhost:8000/category/first/ 我收到一个错误,如下图所示。
我想念什么吗?任何帮助将不胜感激。
答案 0 :(得分:1)
如果要使用类别名称进行搜索,则将类别替换为 category_name
post_list = Post.objects.filter(category__name=self.kwargs.get('category'))
否则,在URL中发送类别ID
答案 1 :(得分:0)
ValueError
以10为底的int()无效文字:“ first”
当数据类型不匹配时,抛出此异常。 在这里,根据您的情况,您正在将字符串值“ first”分配给整数变量。
尝试找到它并以整数形式分配索引值。
已解决或未解决的答复!