我正在尝试根据用户点击更新 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)时使其显示在视图功能中。
我使用隐藏字段来收集用户输入,并且我能够在 request.POST 中看到这一点。感谢 viaTech 与我们联系。