недопустимый литерал для int () с основанием 10: 'first' - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу отфильтровать список сообщений по категориям, используя 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 ]

1 голос
/ 30 сентября 2019

Если вы ищете по названию категории, замените категорию на имя_категории

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

В противном случае отправьте идентификатор категории в URL

0 голосов
/ 30 сентября 2019

ValueError
недопустимый литерал для int () с основанием 10: 'first'

Это исключение выдается при несовпадении типов данных. Здесь, в вашем случае, вы присваиваете строковое значение «first» целочисленной переменной.

Попробуйте найти это и назначить значение индекса в виде целого числа.

ответить, если решено или не решено!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...