Django动态下拉列表从数据库中获取

8
我想开发一个Django应用程序,其中一个功能是动态下拉列表...特别是针对车辆品牌和型号...选择特定的品牌将更新模型列表,只显示属于该品牌的所有模型....我知道这在javascript或jQuery中是可能的(如果有人有答案,这将是我的首选),但我不知道该如何去做。
另外,我希望品牌、型号、年份和系列是共同的,其他属性如颜色、变速器等都是变量,这样一个新车只需要输入品牌、型号、年份和系列即可。任何想法都将不胜感激。
2个回答

9
你所提到的三个常见项,制造商、型号和年份将是三个输入值。当这些值被传递给服务器时,会返回一个包含详细信息的对象到调用页面。该页面将使用JavaScript解析对象详细信息,并更新UI以将其显示给用户。
从Django方面来看,需要有能力接收三个输入并返回输出的设施。从客户端方面来看,需要有能力将三个输入传递给服务器,然后适当地解析服务器的响应。
对于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>


0

这很神奇: Django动态过滤下拉选择字段

他的问题:

"情况是这样的:我有一个包含汽车品牌和型号的数据库。当用户选择一个品牌时,我想要更新型号下拉列表,只显示与该品牌相关联的型号。...因此我想使用Ajax来填充数据。"

你不是同一个人吧? :)


不是同一个人...只是我们都在尝试解决同样的问题...谢谢你提供的链接,看起来对我来说是个不错的开始。 - Stephen
2
我就是那个人,这太神奇了 :) - Dustin
1
链接现在是404错误。@Dustin请帮助我们找回那些东西。 - Arockia
@Arockia,这篇文章似乎仍然存在于https://dustindavis.me/dynamic-filtered-drop-down-choice-fields-with-django/。等待编辑更新此答案中的链接。 - matz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接