<p>这就是为什么我在一个页面上有两个相互依赖的模型选择字段。在下面,<code>field2</code>取决于<code>field1</code>:</p>
<p><strong>Javascript部分</strong></p>
<p>请注意,在<code>$.each()</code>中,不应该使用<code>$.parseJSON(resp)</code>(而不仅仅是<code>json</code>),因为jQuery已经对其进行了解析(由于内容类型为“application/json”响应)-请参见<a href="https://stackoverflow.com/questions/8081701">I keep getting "Uncaught SyntaxError: Unexpected token o"</a>。</p>
<pre><code>$(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);
}
});
});
});
</code></pre>
<p><strong>Django views.py部分</strong></p>
<p>注意,django rest框架也可以做到这一点。
我正在从我的<code>MyModel2</code>中获取<code>fields=('id', 'code', 'affection'))</code>-然后可以使用<code>obj.fielsd.<myfieldname></code>在JQuery中找到这些。</p>
<pre><code>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')
</code></pre>