为什么 request.POST 在 django 表单渲染后不显示使用 javascript 添加的值

问题描述 投票:0回答:1

我正在尝试根据用户点击更新 django 表单。用户可以通过单击按钮在 DOM 上添加更多表单标签,向其添加值,并在用户完成后提交。

我使用 modelForm 来构建在模板中呈现的表单的初始部分。但是,当提交表单时,它仅显示继承 forms.ModelForm 的 ReportForm 类的一部分的值。

这是我的报告课:

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 添加的新标签包含到报表中,并在打印(request.POST)时使其显示在视图功能中。

javascript python django django-models django-forms
1个回答
0
投票

我使用隐藏字段来收集用户输入,并且我能够在 request.POST 中看到这一点。感谢 viaTech 与我们联系。

© www.soinside.com 2019 - 2024. All rights reserved.