【问题标题】:Passing the value of selected option of dropdown value to django database将下拉值的选定选项的值传递给 django 数据库
【发布时间】: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>   

【问题讨论】:

    标签: python html django forms django-forms


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多