将下拉值的选定选项的值传递给 django 数据库

Posted

技术标签:

【中文标题】将下拉值的选定选项的值传递给 django 数据库【英文标题】:Passing the value of selected option of dropdown value to django database 【发布时间】:2015-09-20 23:56:39 【问题描述】:

我正在做一个 Django 项目。我正在制作一个 html 表单(不使用 Djnango 表单)。现在,我可以使用“POST”方法将“文本”输入的值传递给数据库(只需将名称赋予输入标签,并从views.py 中访问它们)。但是当涉及到下拉菜单的响应时,我在做同样的事情时遇到了问题。我有一个下拉菜单,用户可以从中选择多个选项。现在,我如何检测用户选择的选项并将它们传递给views.py,以便我可以从那里将它们添加到数据库中?

这是下拉菜单的代码。

        Enter City (hold Ctrl to select more than one)
        <label for="inputCity" class="sr-only">Select City to be shipped to</label><br>
        <select multiple class="form-control" id="optCity" name="city" required>
            % for city in all_cities %
            <option>city.city_name</option>
            % endfor %
        </select><br>   

【问题讨论】:

【参考方案1】:
<option value=" city.id ">city.city_name</option>

http://www.w3schools.com/tags/tag_option.asp


编辑

表单(模板)

<form action="/" method="post"> % csrf_token %
        <p>Enter City (hold Ctrl to select more than one)</p>
        <label for="optCity" class="sr-only">Select City to be shipped to</label><br>
        <select multiple class="form-control" id="optCity" name="city" required>
            % for city in all_cities %
                <option value="city.id">city.name</option>
            % endfor %
        </select>
        <p><input type="submit" value="Send form"/></p>

    </form>

查看

def form_view(request):
    context = 
        'all_cities': City.objects.all()
    

    if request.POST:
        city_pk_list = request.POST.getlist('city', None)
        print(request.POST.getlist('city', None))

        selected_city_obj_list = City.objects.filter(pk__in=city_pk_list)
        print(selected_city_obj_list)


    return render(request, 'index.html', context=context)

型号

class City(models.Model):
    name = models.CharField(max_length=512)

    def __unicode__(self):
        return self.name

假设它呈现

<option value="1">Kyiv</option>

<option value="2">Lviv</option>

<option value="3">Odessa</option>

<option value="4">New York</option>

<option value="5">Tbilisi</option>

我选择了KyivOdessa

所以输出会是

[u'1', u'3']
[<City: Kyiv>, <City: Odessa>]

【讨论】:

谢谢,它有帮助......但问题是,我希望返回“城市”类型的对象。如果我输入 value="city.city_name",它会返回名为特定城市的字符串(比如说 c1 - 字符串)。但我有多个选择 c1、c2、c3 - 它们都是“城市”类型的对象。显然,它表明下拉菜单没有返回“城市”类型的对象。我该怎么办?【参考方案2】:

由于问题是开放的,您有很多选择。这里有两个非常简单的解决方案

最简单的,使用ChoiceFiled。文档是here。

如果您需要更多控制,可以使用特定的小部件。参见文档here

【讨论】:

以上是关于将下拉值的选定选项的值传递给 django 数据库的主要内容,如果未能解决你的问题,请参考以下文章

从下拉框中打开一个fancybox并直接将选定的值传递给它

在选择选项更改时将子组件中的道具传递给父组件

ASP.NET MVC 视图需要将选定的下拉列表和日历日期传递给模型

如何在codeigniter中将ajax选择的依赖下拉选项传递给mysql数据库

如何从 Django 的下拉列表中从用户的选定选项中进行查询

获取隐藏下拉列表禁用选定选项的值