2009-08-26 31 views
8

Tôi muốn phát triển một ứng dụng Django và một trong những chức năng tôi muốn có là danh sách thả xuống động ... đặc biệt cho xe và mô hình ... chọn một làm cho sẽ cập nhật danh sách các mô hình với chỉ các mô hình mà rơi theo mà làm .... Tôi biết điều này là có thể trong javascript hoặc jQuery (điều này sẽ là sự lựa chọn tốt nhất của tôi nếu có ai có câu trả lời) nhưng tôi không biết làm thế nào để đi về nó.Danh sách thả xuống động Django động từ cơ sở dữ liệu

Ngoài ra, tôi muốn tạo, mô hình, năm và hàng loạt là phổ biến thì các thuộc tính khác như màu sắc, truyền dẫn, vv là biến để chỉ cần nhập mô hình, mô hình, năm và chuỗi một chiếc xe mới. Bất kỳ ý tưởng nào cũng sẽ được đánh giá cao.

Trả lời

9

3 điều bạn đề cập đến là phổ biến, thực hiện, mô hình, năm, sẽ là 3 giá trị đầu vào. Khi được cung cấp cho máy chủ, một đối tượng chứa các chi tiết sẽ được trả về trang gọi. Trang đó sẽ phân tích chi tiết đối tượng (sử dụng JavaScript) và cập nhật giao diện người dùng để hiển thị chúng cho người dùng.

Từ phía Django, cần phải có cơ sở để lấy 3 yếu tố đầu vào và trả lại kết quả. Từ phía máy khách, cần phải có các phương tiện để truyền 3 đầu vào cho máy chủ và sau đó phân tích cú pháp phản hồi của máy chủ một cách thích hợp.

Có khung REST api cho Django giúp bạn dễ dàng thêm "api" được đề cập ở trên - Piston. Sử dụng Piston, bạn chỉ cần tạo một URL cho tài nguyên đó, và sau đó thêm một trình xử lý để xử lý nó. (Bạn vẫn sẽ cần phải đọc lướt tài liệu Piston, nhưng điều này sẽ cho bạn một ý tưởng về những gì có vẻ như)

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 

này chỉ đơn giản là thiết lập các www.yoursite.com/vehicle/[make]/ url [model]/[year]/json trả về một đối tượng dữ liệu tùy chỉnh trong JSON để jquery phân tích cú pháp. Về phía khách hàng, bạn có thể sử dụng jquery để thiết lập một sự kiện (bind) để khi tất cả 3 drop down có một giá trị được chọn, nó sẽ thực thi một $ .get() tới URL api. Khi nó nhận được kết quả này, nó chuyển nó vào trình phân tích cú pháp JSON Jquery, và cung cấp cho đối tượng tùy chỉnh, như một đối tượng javascript. Đối tượng đó sau đó có thể được sử dụng để điền thêm các menu thả xuống.

(cảnh báo lớn, tôi chỉ viết những điều sau đây ra khỏi đỉnh đầu của tôi, vì vậy nó không có nghĩa là để được sao chép và dán. Nó chỉ cho ý tưởng chung.)

<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

Đây là kỳ lạ: Dynamic Filtered Drop-Down Choice Fields With Django

câu hỏi của ông:

"Đây là tình hình: Tôi có một cơ sở dữ liệu với xe làm và các mô hình Khi người dùng chọn một thực hiện, tôi muốn. để cập nhật các mô hình thả xuống chỉ với các mô hình liên quan đến việc tạo ra. ... Vì vậy, tôi muốn sử dụng Ajax để điền dữ liệu. "

Bạn không phải là cùng một anh chàng? :)

+0

Không phải là cùng một chàng trai ... chỉ là chúng tôi đang cố gắng giải quyết cùng một vấn đề ... cảm ơn vì liên kết này, nó trông giống như một khởi đầu tốt cho tôi. –

+2

Tôi là anh chàng, và điều này thật kỳ lạ :) – Dustin

Các vấn đề liên quan