这就是我最终在一个页面上拥有两个相互依赖的模型选择字段的方式。在下面,field2 取决于 field1:
Javascript 部分
请注意,在$.each() 中,不应使用$.parseJSON(resp)(而不仅仅是json),因为我们已经让jQuery 解析了它(由于 content_type='application/json' 响应) - 请参阅I keep getting "Uncaught SyntaxError: Unexpected token o".
$(document).ready(function() {
$("#id_field2").empty();
$("#id_field1").change(function(){
$.ajax({
url: "{% url 'ajax_get_field_2' %}",
type: 'GET',
data: {field1_id: $("#id_field1").val()},
dataType: "json",
success: function(resp){
$("#id_field2").empty();
$.each(resp, function(idx, obj) {
$('#id_field2').append($('<option></option>').attr('value', obj.pk).text(obj.fields.code + ' (' + obj.fields.affection + ')'));
});
},
error: function(jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
});
});
Django views.py 部分
请注意,这也可以由 django-rest-framework 完成。
我从我的MyModel2 获得fields=('id', 'code', 'affection')) - 然后可以使用obj.fielsd.<myfieldname> 在JQuery 中访问这些。
class AjaxField2View(generic.View):
def get(self, request, *args, **kwargs):
field_1 = get_object_or_404(MyModel1, pk=request.GET.get('field1_id', ''))
model2_results = MyModel2.objects.filter(k_value=field_1 .k_value)
return HttpResponse(serializers.serialize('json', model2_results, fields=('id', 'code', 'affection')), content_type='application/json')