Как отфильтровать данные из модели на основе выбора пользователя веб-страницы в форме в Django?

У меня есть модель данных с записями, и эти записи представлены на веб-странице. Я создал функцию, которая подготавливает таблицу с записями из модели данных и возвращает требуемую структуру этих данных в веб-странице pu.html.

И я хотел бы отфильтровать эти данные на основе выбора пользователя в форме на той же веб-странице.

Поэтому я создал вторую модель Manager_selection, где хранится выбор пользователя, и я получаю из этой модели последнее значение, на основе которого данные фильтруются в моей функции, которая готовит таблицу с записями.

А мне нужно как-то включить функцию для формы в Views, чтобы иметь возможность сохранять выбор пользователя и на основе которого данные будут фильтроваться, так как мой View основан на модели Data, а форма основана на модели Manager_selection.

models.py:

  1. Модель данных - включает детальные данные для каждого проекта (дата, номер_документа, сумма, проект, счет, компания,...)

  2. Модель проектов - включает данные о проекте (код, mo - менеджер проекта, vps - менеджер сайта, ...). Эта модель связана с моделью данных связью 1:N, поэтому один проект может иметь несколько записей Data

    .
  3. Модель Employee - включает первое, второе имя и должность - связана с моделью Project 1:N - вы можете выбрать mo (менеджер проекта) и vps (менеджер сайта) из модели Employee для каждого проекта, и каждый проект имеет только одного mo и vps.

  4. Manager_selection - эта модель включает mo (менеджер проекта) и vps (менеджер сайта), выбранные пользователем в форме - я получаю последнее значение из этой модели и фильтрую на основе этих двух имен данные, которые представлены на веб-странице.

class Manager_Selection(models.Model):

    def mo_selection_list_creation():
        mo_data = Employees.objects.values()
        mo_list = []
        for i in mo_data:
            if i["position"] == "MO":
                mo_list.append([str(i["name"]+" "+i["surname"]), str(i["name"]+" "+i["surname"])])
        return mo_list

    def vps_selection_list_creation():
        vps_data = Employees.objects.values()
        vps_list = [], ]
        for i in vps_data:
            if i["position"] == "VPS":
                vps_list.append([str(i["name"]+" "+i["surname"]), str(i["name"]+" "+i["surname"])])
        return vps_list


    mo_list = mo_selection_list_creation()
    vps_list = vps_selection_list_creation()


    mo = models.CharField("MO", choices=mo_list, max_length=50, blank=True, null=True)
    vps = models.CharField("VPS", choices=vps_list, max_length=50, blank=True, null=True)


    def __str__(self):
        return f"{self.mo}, {self.vps}"

Views - принимает данные из модели данных и подготавливает таблицу на основе функции table_creation();

class PuView(LoginRequiredMixin, FormView):

    template_name = "pu.html"
    model = Data
    success_url = reverse_lazy("pu")
    form_class = ManagerSelectionForm

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        entry_data = Data.objects.values() 
        try:
            mo = Manager_selection.objects.values().last()["mo"]
            vps = Manager_selection.objects.values().last()["vps"]
        except:
            mo = None
            vps = None
        try:
            data = table_creation(entry_data, mo, vps)
        except:
            data = 0
        context["data"] = data

        return context

форма основана на модели Manager_Selection:

class ManagerSelectionForm(ModelForm):
    class Meta:
        model = models.Manager_Selection
        fields = ("mo", "vps")

и форма включена в html страницу:

<form method="post">
                {% csrf_token %}
                <div class="input-group p-0 m-0">
                    <span class="pt-2 pe-2">Výběr MO, VPS: </span>
                    {{ form.mo }}
                    {{ form.vps }}
                    <button class="btn btn-outline-dark" type="submit"><i class="fa-solid fa-file-import"></i> Odeslat</button>
                </div>
            </form>

Подведем итоги:

  1. есть ли какой-то способ сделать это более простым способом? - чтобы иметь возможность фильтровать записи из модели данных на основе выбора пользователя веб-страницы?
  2. если мой способ подходит, как включить функцию для сохранения данных из формы в модель Manager_selection в моем представлении, которое основано на другой модели Data и я использую там функцию get_context_data()?
  3. Вернуться на верх