以10为底的int()的无效文字:“ first”

时间:2019-09-30 12:35:49

标签: python django

我想使用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/ 我收到一个错误,如下图所示。 enter image description here

我想念什么吗?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果要使用类别名称进行搜索,则将类别替换为 category_name

    post_list = Post.objects.filter(category__name=self.kwargs.get('category'))

否则,在URL中发送类别ID

答案 1 :(得分:0)

  

ValueError
  以10为底的int()无效文字:“ first”

当数据类型不匹配时,抛出此异常。 在这里,根据您的情况,您正在将字符串值“ first”分配给整数变量。

尝试找到它并以整数形式分配索引值。

已解决或未解决的答复!