Форма не отправляется в базу данных при использовании HTMX

У меня есть следующие модели, и как вы видите, они связаны друг с другом


class Leads(models.Model):

    project_id = models.BigAutoField(primary_key=True, serialize=False)
    created_at = models.DateTimeField(auto_now_add=True)
    expected_revenue = MoneyField(decimal_places=2,max_digits=14, default_currency='USD')
    expected_licenses = models.IntegerField()
    country = CountryField(blank_label='(select_country)')
    status = models.CharField(choices=[('Open', 'Open'), ('Closed', 'Closed'), ('Canceled', 'Canceled'),
                                       ('Idle', 'Idle')
                                       ], max_length=10)
    estimated_closing_date = models.DateField()
    services = models.CharField(choices=[('Illumination Studies', 'Illumination Studies'),
                                  ('Training', 'Training'),('Survey Design Consultancy', 'Survey Design Consultancy'),
                                  ('Software License', 'Software License'),
                                  ('Software Development','Software Development')], max_length=40)
    agent = models.ForeignKey(Profile, default='agent',on_delete=models.CASCADE)
    company = models.ForeignKey(Company,on_delete=models.CASCADE)
    point_of_contact = models.ForeignKey(Client, default='agent',on_delete=models.CASCADE)
    updated_at = models.DateTimeField(auto_now=True)
    application = models.CharField(choices=[('O&G','O&G'),('Renewables','Renewables'),('Mining','Mining'),
                                         ('Other','Other'),('CSS','CSS')],
                                default='O&G',max_length=20)
    sub_category = models.CharField(choices=[('Wind','Wind'),('Geo-Thermal','Geo-Thermal'),('Solar','Solar'),
                                             ('Tidal','Tidal')], max_length=20, blank=True)


    @property
    def age_in_days(self):
        today = date.today()
        result = self.estimated_closing_date - today
        return result.days

    def __str__(self):
        return f'{self.project_id}'

class LeadEntry(models.Model):
    revenue = MoneyField(decimal_places=2,max_digits=14, default_currency='USD',blank=True)
    date = models.DateField()
    lead_id = models.ForeignKey(Leads,on_delete=models.CASCADE)
    id = models.BigAutoField(primary_key=True, serialize=False)
    probability = models.DecimalField(max_digits=2, decimal_places=2, default=0, blank=True)

    @property
    def est_revenue(self):
        result = self.revenue * probabiity
        return result

По сути, запись о лиде связана с лидом, и я использую HTMX для добавления данных в базу данных LeadEntry с помощью формы.

Форма


class LeadEntryForm(forms.ModelForm):
    class Meta:
        model = LeadEntry
        fields = ('lead_id','date','revenue','probability')
        widgets = {'date': DateInput()}

У меня есть 2 представления, одно, которое будет просто передавать HTML с кнопкой для пользователя, чтобы добавить записи в базу данных, и другое представление с фактической формой

просмотров

@login_required
def add_to_forecast(request):
    id = request.GET.get('project_id')
    request.session['lead_id'] = id
    return render(request, 'account/lead_forecast.html')

@login_required
def forecast_form(request):
    if request.method=='POST':
        form = LeadEntryForm(data=request.POST or None)
        if form.is_valid():
            form.save(commit=False)
            messages.success(request,"Successful Submission")
            return redirect('add_to_forecast')

    lead_id = request.session['lead_id']
    data = {'lead_id':lead_id}

    context = {
        "form":LeadEntryForm(initial=data)
    }
    return render(request, 'account/lead_entry_forecast.html', context)

Наконец, есть 2 HTML страницы, первая связана с add_to_forecast и отображает простую страницу, здесь происходит HTMX, который добавляет форму из следующей HTML страницы

{% extends "base.html" %}
{% load crispy_forms_tags %}
{% load static %}

{% block title %}Client Information {% endblock %}

{% block content %}
  <h1> Add Lead to Sales Forecast </h1>
  <p>Click the Button below to add a Payment Date</p>


    <button type="button" hx-get="{% url 'lead_entry_forecast' %}" hx-target="#leadform" hx-swap="beforeend" >
        Add Lead  </button>

    <div id="leadform">
        <br>
    </div>


{% endblock %}

Форма, которая добавляется пользователем столько раз, сколько он хочет это сделать

{% load crispy_forms_tags %}
{% load static %}
{% block content %}

<div class="container-fluid">
        <form method="post" enctype="multipart/form-data" action=".">
            {% csrf_token %}
            <div class="row justify-content-center">
                <div class="col-sm-1">
                {{ form.lead_id|as_crispy_field }}
                </div>
                <div class="col-sm-2">
                {{ form.date|as_crispy_field }}
                </div>
                <div class="col-sm-2">
                {{ form.revenue|as_crispy_field }}
                </div>
                <div class="col-sm-1">
                {{ form.probability|as_crispy_field }}
                </div>
                <div class="col-sm">
                 <input type="submit" value="Submit" >
                </div>

            </div>

        </form>
</div>
<hr>

{% endblock %}


Проблема у меня в том, что после отправки формы, все, кажется, работает, очевидно, в настоящее время вы можете отправить только один лид, так как я все еще должен добавить больше логики, но в настоящее время форма не отправляет данные в БД, после некоторой отладки, я не смог передать POST, кажется, что просто не отправляет ничего.

Любая помощь будет высоко оценена

Когда вы проектируете страницу HTMX, вы должны быть осторожны с запросом сообщения, поэтому я обрабатывал форму в неправильном представлении, пожалуйста, смотрите ниже представления:

@login_required
def add_to_forecast(request):
    form = LeadEntryForm(data=request.POST or None)
    if request.method == 'POST':
        if form.is_valid():
            form.save()
            return HttpResponse("Success")
        else:
            return render(request, 'account/lead_entry_forecast.html', {"form": form})

    id = request.GET.get('project_id')
    request.session['lead_id'] = id
    return render(request, 'account/lead_forecast.html')


@login_required
def forecast_form(request):
    lead_id = request.session['lead_id']
    data = {'lead_id':lead_id}
    context = {
        "form":LeadEntryForm(initial=data)
    }
    return render(request, 'account/lead_entry_forecast.html', context)

Теперь он работает так, как должен

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