Отправка переменных в хрустящие формы Django

У меня есть форма Django Crispy, определенная в views.py:

@login_required
def PostCreate(request):
    if request.method == 'POST':
        form = PostFileForm(request.POST or None, request.FILES or None)
        files = request.FILES.getlist('file')
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            form.instance.author = request.user
        etc.

и post_form.html:

{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section">
        <button class="btn btn-outline-info" id="audit" onclick="audit()">Basic</button>
        <form method="POST" id="PostForm" data-sektor-url="{% url 'ajax_load_sektors' %}" data-department-url="{% url 'ajax_load_departments' %}"  data-person-url="{% url 'ajax_load_persons' %}" novalidate enctype="multipart/form-data">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4" style="color:red;">Order</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" id="submit" type="submit">Submit</button>
            </div>
        </form>

В моем models.py я определил все модели, которые мне нужны для полной формы. В зависимости от 4 кнопок, которые пользователь может нажать для вызова формы, эта форма должна иметь некоторые поля, скрытые/показанные или автозаполняемые. Я скрываю их с помощью Javascript, например:

<script type="text/javascript">
         function on_load(){
            document.getElementById('hidden_on_open').style.display = 'none';

Моя проблема в том, что я не знаю, какая кнопка нажата. Есть ли способ "передать статическую переменную" или что-то в этом роде в HTML, так как если я передам ее в views.py, она уже будет отображена? Чтобы я мог использовать Javascript для скрытия/показа и автозаполнения определенных полей в зависимости от этой переменной. Простое 0/1/2/3 было бы достаточно.

Попробуйте передать фиксированную переменную через URL, а затем использовать ее в представлениях и шаблоне.

подобно этому.

path('info/nova/<int:type_id>/', views.PostCreate, name='post-create')

Затем примите его в views.py и передайте в качестве контекстного словаря в template.

@login_required
def PostCreate(request, type_id):
    if request.method == 'POST':
        form = PostFileForm(request.POST or None, request.FILES or None)
        files = request.FILES.getlist('file')
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            form.instance.author = request.user
    else:
        form = PostFileForm()

    return render(request, 'post_form.html', {'form': form, 'type_id': 
    type_id})

Теперь примите эту переменную на фронтенде и используйте javascript для ее скрытия и отображения.

Надеюсь, это поможет.

добавьте параметры в url кнопки

<button href="/your/link?param=1">
<button href="/your/link?param=2">
<button href="/your/link?param=3">

тогда получите этот параметр через request.GET.get("param")

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