Questo è il modo in cui ho finito per avere due campi di scelta del modello a seconda dell'uno, su una pagina. In seguito, field2
dipende field1
:
Javascript parte
Si noti che in $.each()
, $.parseJSON(resp)
non devono essere utilizzati (invece di json
), come stiamo già averlo analizzato da jQuery (a causa alla risposta content_type = 'application/json') - vedi 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 parte views.py
Nota che questo può essere fatto probabilmente da django-riposo-struttura del sito. Sto ottenendo fields=('id', 'code', 'affection'))
dal mio MyModel2
- questi possono quindi essere raggiunti in JQuery utilizzando obj.fielsd.<myfieldname>
.
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')
soluzione JS va bene, ma mi avrebbe bisogno di qualche guida con esso.Cosa dovrei inizialmente rendere? – dease
Ho modificato la mia risposta. Scusa per non aver fornito un esempio di codice, ma sono occupato ora. Se non ottieni ciò che vuoi, dimmelo, proverò a fornire maggiori dettagli. –