如何将 jQuery 范围滑块值转换为表单以存储在 Django 的数据库中

胡萨姆·曼苏尔

用户必须能够提交和保存范围滑块1的值目的是让用户猜测对象在现实生活中的填充程度,然后可以在游戏中报告填充百分比。用户界面如下图所示。

目前,我可以从 POST 表单(在 slider.html 中)检索数据作为预设的“值”,而不是范围滑块值。我环顾四周,问题是我对 Javascript 不够熟悉,无法实现解决方案。我在想可以从 javascript 函数中获取值并直接提交 POST html 表单吗?任何人都可以帮助建议如何做到这一点或任何其他建议吗?这是到目前为止的代码,由于许多尝试和错误,它有点混乱

模型.py

from django.db import models
from django.forms import ModelForm
from django import forms


class Measurements(models.Model):
    DeviceId            = models.IntegerField(blank=True, null=True)
    TimeStamp           = models.DateTimeField(auto_now=True)
    Metadata            = models.IntegerField(blank=True, null=True)
    Sensor              = models.IntegerField(default=False)
    Button              = models.IntegerField(default=False)
    QrUser              = models.IntegerField(default=True)
    FillingPercentage   = models.DecimalField(max_digits=4, decimal_places=2, blank=True, null=True)
    slider_value        = models.IntegerField(default=False, null=True, blank=True)



def __str__(self):
    return str(self.DeviceId)

class Meta:
    verbose_name_plural = "Measurements"     

表单.py

from django.forms import ModelForm
from django import forms

from .models import Measurements

class MeasurementsForm(ModelForm):
    class Meta:
        model = Measurements
        fields = ('FillingPercentage','slider_value')
        widgets = {'slider_value' : forms.HiddenInput()}    

def clean_FillingPercentage(self):
    print("fUNCTION CALLED")
    value = self.cleaned_data.get('something_else')
    print(value)


class IntegerFieldForm(forms.Form):
    field5 = forms.IntegerField(
        help_text="Filling percentage", widget=forms.NumberInput(attrs={'type': 'range', 'min': '0', 'max': '100'}))

视图.py

from django.shortcuts import render
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.views.generic import FormView, TemplateView, CreateView
import floppyforms as forms


from .forms import MeasurementsForm


class QRView(CreateView):
    form_class = MeasurementsForm
    template_name = 'QrFill/slider.html'
    success_url = '/guess/'

    def form_valid(self, form):
        instance = form.save(commit=False)
        # instance.FillingPercentage = self.request
        return super(QRView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context ['FillingPercentage'] = 'Add Fill Level'
        return context

    def read_value():
        FillingPercentage = self.request.POST.get('FillingPercentage')
        if FillingPercentage is not None:                
            instruction_task_values.insert(0, FillingPercentage) 
        print('\n\n\nThis is your instruction_task_values in 1 %s', instruction_task_values)




def my_view(request):
# if this is a POST request we need to process the form data
    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = MeasurementsForm(request.POST)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required
            slider_value = form.cleaned_data['slider_value']
            if slider_value is not None:    
                instruction_task_values.insert(0, slider_value)

            # redirect to a new URL:
            return HttpResponseRedirect('/thanks/')

    # if a GET (or any other method) we'll create a blank form
    else:
        form = MeasurementsForm()

    return render(request, 'QrFill/slider.html', {'form': form})

滑块.html

{% load staticfiles %}

{% load bootstrap4 %}

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>rangeslider.js</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="{% static 'css/rangeslider.css' %}"/>
    <style>
        *,
        *:before,
        *:after {
            -webkit-box-sizing: border-box;
               -moz-box-sizing: border-box;
                    box-sizing: border-box;
        }
        html {
            color: #404040;
            font-family: Helvetica, arial, sans-serif;
        }
        body {
            padding: 50px 20px;
            margin: 0 auto;
            max-width: 800px;
        }
        output {
            display: block;
            font-size: 30px;
            font-weight: bold;
            text-align: center;
            margin: 30px 0;
            width: 100%;
        }
        .u-left {
            float: left;
        }
        .u-cf:before,
        .u-cf:after {
            content: "";
            display: table;
        }
        .u-cf:after {
            clear: both;
        }
        .u-text-left {
            text-align: left;
        }
    </style>
</head>
<body>



    <div>

        <div>

             <form method='POST' class='form'> 
            {% csrf_token %}

                <input type="hidden" name="slider_value" id="myVar" value="50" id="hidden1"/> 




                <input type="range" min="0" max="100" step="0.01" value="50" data-rangeslider>

                <output id='output'> </output>

                <button type="submit" name="_submit" class="btn btn-primary btn-lg">Submit</button>

        </div>


    </div>



    <script src="//localhost:8080"></script>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

    <script src="{% static 'js/rangeslider.js' %}"></script>


    <script >
        var myVar = document.getElementById("myVar").value;


    $(function() {


        var $document = $(document);
        var selector = '[data-rangeslider]';
        var $element = $(selector);
        var textContent = ('textContent' in document) ? 'textContent' : 'innerText';
        function valueOutput(element) {
            var value = element.value + "%";
            var output = element.parentNode.getElementsByTagName('output')[0] || element.parentNode.parentNode.getElementsByTagName('output')[0];
            output[textContent] = value;
        }
        $document.on('input', 'input[type="range"], ' + selector, function(e) {
            valueOutput(e.target);
        });



        $element.rangeslider({
            polyfill: false,
            onInit: function() {
                valueOutput(this.$element[0]);
            },
            onSlide: function(position, value) {
            },
            onSlideEnd: function(position, value) {

                $("#amount").text(value);
                console.log("Value: " + value.toString())
                FillingPercentage = value.toString()



            }
        });
    });
    </script>
</body>
</html>
Kryštof Řeháček

我会给你一个关于如何做的想法。

您应该创建一个新的简单视图,它看起来像save_progress(request).

def save_progress(request):
    progress = request.POST.get('progress')
    ...do with it what you want...

比以同样的方式创建 url path('app_name/..path../save-progress/', views.save_progress, name='save-progress')所以现在你将定义 url 和视图,你可以编写 javascript 控制器

var timeout = null;
function saveProgress() {
    clearTimeout(timeout);
    timeout = setTimeout(function() {
        $.ajax({
            method: 'POST',
            url: '{% url "save-progress" %}'
            data: {progress: $('#slider-id-to-be-saved').val()},
            success: function(response) {
                console.log('Yeah! Your data were sent and saved!');
            }
        })
    }, 500); // so it will wait 500ms until it actually sends the POST 
}

并将 onchange 侦听器添加到输入范围

<input type="range" min="0" max="100" step="0.01" value="50" data-rangeslider onchange="saveProgress">

这是它的想法。请注意超时,因此您的数据将在一段时间不更改后实际发送。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将表单模型中的数据获取到 Django 中的数据库中

DJANGO:如何将表单值序列化为json以存储在数据库列中

如何将下拉列表值保存到Django中的数据库

django:如何将数据库中的日期值放入“input type='date'”?

jQuery编程将值存储在sqlite数据库中

如何将默认值添加到变量并存储在 Django 的数据库中?

如何使用Django中存储在数据库中的值自动填充表单模板?

如何将表单数据转换为Django?

如何将表情符号作为POST请求传递给Django并将其存储在MySQL数据库中

将ZipFile对象存储到Django数据库中

如何使用用户在 Django 中的输入将值存储在数据库中?

如何在 Django 表单中查询数据库?

jQuery:如何将“可选”值转换为“滑块”功能?

如何将图像存储在数据库中

如何将表单中的值存储到mySQL数据库中?

如何使用django将列表数据存储到数据库中?

如何将数据库中ANSI(Windows 1252)中存储的值转换为UTF-8

如何将字符序列转换为日期格式以存储在数据库中?

如何将 SQLite 数据库的项目转换为存储在 RecyclerView 中的列表?

如何将字符串转换为可以存储在数据库中的日期?

如何将其存储在数据库mysql PHP jquery中

如何将 JSON 数据插入到 Django 中的数据库中?

如何将用户模型中的用户数据存储在django的数据库表中

如何以良好的方式将多个Django表单保存到数据库中?提升效能

Django-将表单中的数据保存到数据库中

将jquery ui滑块值写入数据库

Django-如何将JavaScript变量保存到Django数据库中?

如何将新数据从ebay添加到Django中的数据库?

如何将数据发布到Django数据库和CSV文件中