Как добавить опцию фильтрации по категориям с помощью фильтра Django
Привет, я пытаюсь добавить опцию фильтрации по категориям на django с помощью Django filter. Но когда я пытаюсь добавить фильтр, я получаю ошибку, говорящую, что
Field 'id' expected a number but got 'blogs'.
Может ли кто-нибудь помочь мне создать фильтр по категориям.
Это модель моего блога
class blog(models.Model):
title = models.CharField(max_length=100, null=True, blank=True)
slug = models.SlugField(max_length=200, unique=True, auto_created=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
created_on = models.DateTimeField(auto_now_add=True)
tags = TaggableManager(blank=True)
category = models.ForeignKey('Categorie', null=True, blank=True, on_delete=models.CASCADE)
Это моя модель категории
class Categorie(models.Model):
name = models.CharField(max_length=100, null=True, blank=True)
slug = models.SlugField(max_length=250, unique=True, auto_created=True)
Это мой файл filters.py
blog_choice = (
('new','new'),
('latest','latest'),
('technology','technology'),
('sports','sports'),
)
category = django_filters.MultipleChoiceFilter(label='Category', choices=blog_choice, widget=CheckboxSelectMultiple(attrs={'class': 'mr-2 h-[15px] w-5 border-gray-300 inline mb-4 '}))
Я пытался создать функцию фильтрации, но получил ошибку
Field 'id' expected a number but got 'new'.
Вы фильтруете по slug
или name
категории, поэтому вы должны фильтровать по category__slug
или category__name
:
category = django_filters.MultipleChoiceFilter(
label='Category',
choices=blog_choice,
widget=CheckboxSelectMultiple(
attrs={'class': 'mr-2 h-[15px] w-5 border-gray-300 inline mb-4 '}
),
field_name='category__slug',
)