Dee*_*end 6 django jquery django-models django-forms django-views
我试图将我添加到我的jQuery元素的值保存SurveyWizardForm到class Person(models.Model):我的数据库中.
我的表单中的所有其他元素都是以正常方式创建的,方法是在forms.py中创建必要的字段和小部件,并在models.py中创建每个问题的数据.因此,它们都会自动运行并保存正确的数据.
但是我已经SurveyWizardForm在某些页面上定制了我,以允许用户通过jQuery滑块提交图像的评级.
我的问题是我似乎无法将此值存储在我的Person模型中.
问题:如何将滑块的值存储到slider_valuePerson模型中?
到目前为止,我所有的尝试都只是在模型/数据库中创建了一个新条目,它不存储我在Form/views.py中的值.我担心我没有正确地将这两个部分连接在一起.
任何帮助深表感谢.谢谢
slider_two.js
这将hidden1使用my jQuery滑块的值更新隐藏的表单字段
if($(this).attr("id") == "one")
$("#hidden1").val((ui.value > 0 ? '+' : '') + ui.value);
Run Code Online (Sandbox Code Playgroud)
wizard_form.html
value="0"当用户移动上面创建的滑块slider_two.js(未显示)时更新
<input type="hidden" name="slider_value" value="0" id="hidden1"/>
<script src="{% static "survey/js/slider_two.js" %}"></script>
Run Code Online (Sandbox Code Playgroud)
views.py
我可以将值读入views.py中
slider_value = self.request.POST.get('slider_value')
if slider_value is not None:
instruction_task_values.insert(0, slider_value)
logger.debug('\n\n\nThis is your instruction_task_values in 1 %s', instruction_task_values)
Run Code Online (Sandbox Code Playgroud)
这适用于每次打印到我的日志时正确的值
models.py
这意味着在DB中创建字段以存储滑块的值.我创建的所有其他条目都正常工作并保存.
class Person(models.Model):
slider_value = models.IntegerField(null=True, blank=True, max_length=1000)
Run Code Online (Sandbox Code Playgroud)
forms.py
这是我相信我的问题所在.
下面是我尝试"连接"到slider_value我的表单中的现有内容并将其添加到我的Person模型中,但它所做的只是在我的表单中创建一个新的fiel.
class SurveyFormIT1(forms.ModelForm):
class Meta:
model = Person
fields = ['slider_value']
widgets = {'slider_value' : forms.HiddenInput}
Run Code Online (Sandbox Code Playgroud)
我最终找到了解决这个问题的方法。
最重要的问题是,我试图将信息添加到我的 Person 模型中,该信息不是以传统方式从我的forms.py/ '生成/源自'models.py的,而是从我的 jQuery 脚本在页面上'生成'的。
我知道我必须创建一个模型字段和相应的表单字段来获取该值。最初我认为我应该将这个值发送给我的views.py(如上面所讨论的)。这是错误的。
当我检查 SessionWizardView/form_wizard 输出的 html 页面时,我意识到即使我调用了每个表单字段,例如,field = ['slider_one_value']它也会被渲染为例如
<input id="id_9-slider_one_value" type="hidden" name="9-slider_one_value" value="-37"></input>
Run Code Online (Sandbox Code Playgroud)
添加的内容id_9-与调查的第九页相同。
因此,如果我修改 jQuery 以在主隐藏字段发送到我的视图的同时更新此字段,则该值将自动存储到我的模型中
最好的部分是我可以从同一个脚本更新任意数量的这些字段
我希望这对其他人有帮助
我的代码
Wizard_form.html
这调用了我的 slider_two.js 脚本
<script src="{% static "survey/js/slider_two.js" %}"></script>
Run Code Online (Sandbox Code Playgroud)
slider_two.js
在页面上创建用户可以移动的滑块。然后它更新结果和发送到视图的隐藏字段
它还更新新创建的隐藏字段,这些字段与通过 SessionWizardView 渲染后在模型中创建的字段相对应
$('#submit').click(function() {
var username = $('#hidden').val();
if (username == "") username = 0;
$.post('comment.php', {
hidden: username
}, function(return_data) {
alert(return_data);
});
});
$(".slider").slider({
animate: true,
range: "min",
value: 0,
min: -100,
max: +100,
step: 1,
//This updates the slider-result below the slider bar so the participant can see their rating
slide: function(event, ui) {
$("#slider-result").html((ui.value > 0 ? '+' : '') + ui.value);
//This updates the hidden form field which is read by my views.py
if($(this).attr("id") == "one")
$("#hidden1").val((ui.value > 0 ? '+' : '') + ui.value);
//This updates the id_9-slider_one_value form field which matches the name of fields = ['slider_one_value'] after it has been rendered
if($(this).attr("id") == "one")
$("#id_9-slider_one_value").val(ui.value);
//This updates the id_10-slider_two_value form field which matches the name of fields = ['slider_one_value'] after it has been rendered
if($(this).attr("id") == "one")
$("#id_10-slider_two_value").val(ui.value);
....
// Update as many hidden forms fields as necessary
}
});
Run Code Online (Sandbox Code Playgroud)
模型.py
在数据库中创建条目来存储值
slider_one_value = models.SmallIntegerField(null=True, max_length=100, blank=True)
slider_two_value = models.SmallIntegerField(null=True, max_length=100, blank=True)
Run Code Online (Sandbox Code Playgroud)
表格.py
创建隐藏表单字段以从 jQuery 脚本获取值
class SurveyFormF1(forms.ModelForm):
class Meta:
model = Person
fields = ['slider_one_value']
widgets = {'slider_one_value' : forms.HiddenInput}
class SurveyFormF2(forms.ModelForm):
class Meta:
model = Person
fields = ['slider_two_value']
widgets = {'slider_two_value' : forms.HiddenInput}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
934 次 |
| 最近记录: |