3 вещи, которые вы упоминаете как общие, марка, модель, год, будут 3 входными значениями. При передаче на сервер объект, содержащий детали, будет возвращен на вызывающую страницу. Эта страница будет анализировать детали объекта (используя JavaScript) и обновлять пользовательский интерфейс, чтобы отображать их пользователю.
Со стороны Django должны быть средства, чтобы взять 3 входа и вернуть результат. Со стороны клиента должны быть средства для передачи 3 входных данных на сервер и последующего надлежащего анализа ответа сервера.
Существует DEST-инфраструктура REST для Django, которая позволяет довольно просто добавить упомянутый выше "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 () для URL API. Когда он получает этот результат обратно, он передает его в анализатор 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>