Как сделать фильтр поиска на сайте 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

Вернуться на верх