【问题标题】:Django Dynamic Drop-down List from Database来自数据库的 Django 动态下拉列表
【发布时间】:2010-11-22 23:57:41
【问题描述】:

我想开发一个 Django 应用程序,我想要的功能之一是动态下拉列表...特别适用于车辆品牌和型号...选择特定品牌将仅更新模型列表属于该模型的模型....我知道这在 javascript 或 jQuery 中是可能的(如果有人有答案,这将是我的最佳选择)但我不知道该怎么做。

另外,我希望品牌、型号、年份和系列是通用的,然后颜色、传输等其他属性是变量,因此只需输入品牌、型号、年份和系列新车。任何想法都将受到高度赞赏。

【问题讨论】:

    标签: javascript django forms list dynamic-data


    【解决方案1】:

    您提到的 3 个常见的东西,品牌、型号、年份,将是 3 个输入值。当提供给服务器时,包含详细信息的对象将返回到调用页面。该页面将解析对象详细信息(使用 JavaScript),并更新 UI 以将它们显示给用户。

    在 Django 方面,需要有接受 3 个输入并返回输出的设施。在客户端,需要有工具将 3 个输入传递给服务器,然后适当地解析服务器的响应。

    Django 有一个 REST api 框架,可以很容易地添加上面提到的“api”——Piston。使用 Piston,您只需为该资源创建一个 URL,然后添加一个处理程序来处理它。 (您仍然需要浏览 Piston 文档,但这应该可以让您了解它的外观)

    urls.py:
    vehicle_details = Resource(handler=VehicleDetails)
    url(r'^vehicle/(?<make>.*)/(?<model>.*)/(?<year\d{2,4}/(?P<emitter_format>[a-z]{1,4}), vehicle_details, name='vehicle_details'),
    
    handler.py:
    class VehicleDetails(BaseHandler):
        methods_allowed = ('GET',)
        model = Vehicles  #whatever your Django vehicle model is
    
        def read(self, request, *args, **kwargs):
            # code to query the DB and select the options
            # self.model.objects.filter()...            
            # Build a custom object or something to return
    
            return custom_object
    

    这只是设置 URL www.yoursite.com/vehicle/[make]/[model]/[year]/json 以返回 JSON 格式的自定义数据对象供 jquery 解析。

    在客户端,您可以使用 jquery 设置事件(绑定),以便当所有 3 个下拉菜单都选择了一个值时,它将执行 $.get() 到 api URL。当它得到这个结果时,它会将它传递给 Jquery JSON 解析器,并将自定义对象作为 javascript 对象提供。然后可以使用该对象来填充更多下拉菜单。

    (严重警告,我只是从头顶写了以下内容,所以它不是要复制和粘贴的。这只是为了大致的想法。)

    <script type="text/javascript">
    
        // On document load
        $(function() {
            $('#dropdown_make').bind('change', checkForValues());
            $('#dropdown_model').bind('change', checkForValues());
            $('#dropdown_year').bind('change', checkForValues());
        });
    
        function checkForValues() {
            if ($('#dropdown_make').val() && $('#dropdown_model').val() && $('#dropdown_year').val())
                updateOptions();        
        }
    
        function updateOptions() {
            url = '/vehicle/';
            url += $('#dropdown_make').val() + '/';
            url += $('#dropdown_model').val() + '/';
            url += $('#dropdown_year').val() + '/';
            url += 'json/';
            $.get(url, function(){
                // Custom data object will be returned here
            })
        }
    </script>
    

    【讨论】:

      【解决方案2】:

      这太不可思议了:Dynamic Filtered Drop-Down Choice Fields With Django

      他的问题:

      “情况如下:我有一个包含汽车品牌和型号的数据库。当用户选择一个品牌时,我想仅使用与该品牌关联的模型来更新模型下拉列表。...因此我想使用 Ajax 来填充数据。”

      你不是同一个人吗? :)

      【讨论】:

      • 不是同一个人...只是我们正在尝试解决相同的问题...感谢您提供的链接,这对我来说似乎是一个好的开始。
      • 我就是那个人,这太不可思议了:)
      • 链接现在是404。 @Dustin 请帮助我们找回那些东西
      • @Arockia,这篇文章似乎仍然存在于dustindavis.me/…。等待编辑以更新此答案中的链接。
      猜你喜欢
      • 1970-01-01
      • 2016-03-09
      • 2021-04-16
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多