如何将值从HTML传递到Django视图?

时间:2018-11-16 04:42:57

标签: django

我在html中有一个选项列表。

<select>
        <option value="Please select" disabled selected>- Please Select -</option>
        <option value="Iphone">Iphone</option>
        <option value="Samsung">Samsung</option>
</select>

当用户选择其中一个选项时,将显示带有数据的特定表。

在views.py中:

dev_model = Device.objects.filter(name='name').all()

我想从html获取数据,然后在字段'name'中用数据库过滤该选项。

如果它们相同,则将检索数据并以html显示。

2 个答案:

答案 0 :(得分:0)

您可能要使用Django Form来完成此操作。

在名为forms.py的文件中(与models.py位于同一目录中),您将看到类似以下内容的文件:

from django import forms

class MyForm(forms.Form):
    NAME_CHOICES = (('Iphone', 'Iphone'),
                    'Samsung', 'Samsung'))
    name = forms.ChoiceField(choices=NAME_CHOICES)

然后,在您看来,通过上下文传递表单并将其呈现在django模板中。我经常建议使用ModelForm而不是Form,但是我对您的应用程序/用例没有任何细节。

将表单POST返回到您的视图时,您应该可以通过使用

获取数据
form=MyForm(request.POST)
if form.is_valid():
    name = form['name'].value()

文档链接应该是入门的好地方

要在用户选择正确的字段后立即显示数据,您可以使用以下两种方法之一进行操作:

  • 如果要在服务器端进行过滤,请使用ajax

  • 使用DataTables将所有数据传递到浏览器,并让用户在方便时过滤其显示。

您的问题过于笼统,无法提供具体答案,同时又缺乏背后的必要细节。我已经为您的表格提供了起点,并提供了必要文档的链接。希望对您有帮助

答案 1 :(得分:0)

You can keep mapping of device to a particular value like this:-

DEVICE_TO_MAPPING = {     0:“三星”,     1:“ Iphone”, }

然后使用此映射将上下文发送为变量,例如“ devicemapping”,以模板中的html形式呈现。

<form name="device-form" method='POST' action='.'>
    <select>
    <option value="{{device_value}}" disabled selected>- Please Select -</option>
    {% for device_value, device_name in devicemapping.items %}
        <option name='{{device_value' value="{{device_value}}">{{ device_name }}</option>
    {% endfor %}
    </select>
</form>

在您的views.py中,您可以使用“映射”过滤数据。

device_value = request.POST.get('device_value')
device_name = DEVICE_TO_MAPPING.get(device_value)
dev_model = Device.objects.filter(name=device_name)