Почему request.POST не показывает значения, добавленные с помощью javascript после отрисовки формы django

Я пытаюсь обновить форму django в соответствии с нажатиями пользователя. Пользователю разрешено добавлять дополнительные теги формы в DOM, нажимая на кнопку, добавлять значение и отправлять, когда пользователь закончил.

Я использовал modelForm для создания начальной части формы, которая была отображена в шаблоне. Но когда форма отправляется, она показывает только значения, которые являются частью класса ReportForm, который наследует forms.ModelForm.

Вот мой класс отчетов:

class ReportForm(forms.ModelForm):

date_resolved = forms.DateField(widget=forms.DateInput(attrs={
    'name': 'date_resolved',
    'type': 'date',
}), label="Date resolved (ignore if not):")

bias_score = forms.IntegerField(widget=forms.NumberInput(attrs={
    'type': 'range',
    'width': '100%',
    'value':0,
    'min': 0,
    'max': 10,
    'step': 1,
    'style': "padding: 0;"
}), label="Bias Score (between 0 and 10)")


class Meta:
    model = Reports
    fields = ['date_resolved', 'tags', 'bias_score']

и вот как выглядит класс отчета

class Reports(models.Model):

user = models.ForeignKey(User, on_delete=models.CASCADE)
conversation = models.ForeignKey(Conversations, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tags, null=True, blank=True)
bias_score = IntegerRangeField(min_value=1, max_value=10)
resolved = models.BooleanField(default=False)
date_resolved = models.DateField(blank=True, null=True)
date_added = models.DateField(auto_now_add=True)

Скрипт javaScript немного длинный, но вот самая важная часть:

function create_tags(){
let label_text_content = null
if (IS_PROMPT == true){
    IS_PROMPT = false
    INPUT_COUNTER +=1
    label_text_content = 'Prompt:'
    
    prompt_response = `${label_text_content}_${INPUT_COUNTER}`
    // console.log("is prompt true", label_text_content, "prompt response", prompt_response);
    
}
else {
    label_text_content = 'Response:'
    IS_PROMPT = true
    prompt_response = `${label_text_content}_${INPUT_COUNTER}`
    // console.log("is prompt false", label_text_content, "prompt response", prompt_response);
}
let div_row = document.createElement('div')
div_row.classList.add('form_row', 'conv_row')

let div_label = document.createElement('div')
div_label.classList.add('tag_label')
let label_for = document.createElement('label')
label_for.id = prompt_response
label_for.textContent = label_text_content
div_label.appendChild(label_for)

let div_tag = document.createElement('form_tag')
div_tag.classList.add('form_tag')
let text_area = document.createElement('textarea')
text_area.id = `${prompt_response}`
div_tag.appendChild(text_area)



return [div_label, div_tag, div_row]

}

function create_message(){
let tags = create_tags()
div_label = tags[0]
div_tag = tags[1]
div_row = tags[2]
    
div_row.appendChild(div_label)
div_row.appendChild(div_tag)
conversations.appendChild(div_row)

}

Как включить новые теги, добавленные через javascript, в форму отчета и сделать так, чтобы они отображались в функции просмотра при выводе print(request.POST).

Я использовал скрытое поле для сбора пользовательских данных и смог увидеть это в request.POST. Спасибо viaTech за помощь.

Вот код, который я использовал для решения проблемы. У меня есть скрытая текстовая область в форме, и когда пользователь отправляет форму, я обрабатываю значения запроса/ответа и использую их для замены значения текстовой области.

submit_report_form.addEventListener('click', (e)=> {
e.preventDefault()
let id_conv_holder = document.querySelector('#id_conv_holder')
let conversations = document.querySelector('#conversations').childNodes
let conversations_arr = [...conversations].slice(1,)
let total_in_prompts = document.querySelectorAll('.input_prompts')
/**
 * @todo total_in_prompts to check if the user has provided 
 * prompt without response or vice versa
 * this can be infered if the total_in_prompts is not even
 * i.e not divisble by 2.
 */
// console.log("total_in_prompts", total_in_prompts.length);
let cur_val_load = {}
for (let i=0; i<conversations_arr.length; i++){
    let cur_label_node = conversations_arr[i].childNodes[0].childNodes[0].id.toLowerCase()
    let cur_tag_node = conversations_arr[i].childNodes[1].childNodes[0].value.toLowerCase()
    let cur_tag_node_id = conversations_arr[i].childNodes[1].childNodes[0].id.toLowerCase()
    cur_val_load[`${cur_tag_node_id}`] = cur_tag_node
   
}

id_conv_holder.value = JSON.stringify(cur_val_load)

report_form.submit()

})

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