Как сделать фильтр поиска на сайте django
У меня есть база данных с именем из прикрепленных файлов models.py
class UploadFile(models.Model):
user = models.ForeignKey(User,on_delete = models.CASCADE,related_name='file_created' ,verbose_name='Автор')
title = models.CharField(max_length=200, verbose_name='Заголовок')
# uploadedfile = models.FileField(upload_to='files/',null=True, verbose_name='Файл')
description = models.TextField(blank=True, verbose_name='Описание')
createdtime = models.DateField(auto_now_add=True, db_index=True, verbose_name='Дата создания')
price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True, verbose_name='Цена')
number_course = models.IntegerField(null=True, blank=True, verbose_name='Курс')
number_semestr = models.IntegerField(null=True, blank=True, verbose_name='Семестр')
subjectt = models.CharField(max_length=200, null=True,verbose_name='Предмет')
type_materials = models.CharField(max_length=200,null=True, verbose_name='Тип работы')
institute = models.CharField(max_length=200, null=True, verbose_name='Институт')
def __str__(self):
return self.title
class Meta:
verbose_name = 'Загрузка файла'
verbose_name_plural = 'Загрузка файлов'
Мне нужно сделать фильтр по таблице, которая получается при загрузке файла: Страница с таблицей:
И мой код поиска в файле views.py:
def buy_files(request):
bdfiles = FeedFile.objects.all()
upfiles = UploadFile.objects.all()
form = FileFilterForm(request.GET)
if form.is_valid():
if form.cleaned_data["number_course"]:
bdfiles = bdfiles.filter(number_course__exact = form.cleaned_data["number_course"])
if form.cleaned_data["number_semestr"]:
bdfiles = bdfiles.filter(number_semestr__exact = form.cleaned_data["number_semestr"])
if form.cleaned_data["subjectt"]:
bdfiles = bdfiles.filter(course__in = form.cleaned_data["subjectt"])
if form.cleaned_data["type_materials"]:
bdfiles = bdfiles.filter(course__in = form.cleaned_data["type_materials"])
return render(request, 'chat/files/buyfile.html', {'bdfiles': bdfiles, 'form':form})
Но когда я пытаюсь отфильтровать данные, ничего не происходит. Я не знаю, как сделать поиск, например, только по одному пункту, например, по курсу или семестру, и так далее.
Если вы используете это для де-фильтрации с помощью кнопки отправки, то проблема в том, что форма отправляет POST-запрос.
<form action="" method="post" style="width:90%">
А ваше представление фильтрует, используя данные, переданные как GET
form = FileFilterForm(request.GET)
Вы должны создать for с method="get"
, чтобы это работало.
Чтобы сделать это проще, вы можете использовать django-filter