Как автозаполнить форму на основе выбранного 'id' с помощью javascript или ajax в django
<class Fuel(models.Model):
vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
previous_km = models.IntegerField(blank=False, null=False)
progressive_km = models.IntegerField(blank=False, null=False)
когда я выбираю автомобиль, то соответствующий автомобиль previous_km
автоматически заполняется в форме.
здесь написан простой код javascript вручную, но я хочу взять из базы данных.
<script>
let usersData = [
{
id: 1,
email: "u1@gmail.com",
fname: "fname-1",
lname: "lname-1",
previous_km : 1000,
},
{
id: 2,
email: "u2@gmail.com",
fname: "fname-2",
lname: "lname-2",
previous_km : 2000,
},
];
document.getElementById('vehicle').onchange = (e) => {
let selectedUser = usersData.find(userdata => userdata.id == e.target.value);
console.log(selectedUser);
document.getElementById('previous_km').value = selectedUser.previous_km;
};
В целом это то, что я бы сделал. Здесь используется JQuery + Ajax для обработки постинга.
Javascript (JQuery)
$(document).ready(function() {
$("#vehicle").change(function(){
if ($(this).val() == ''){
// value is blank, don't post
return;
};
postdata = {
'vehicle_pk': $(this).val(),
// token if being logged in is required
'csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val(),
// This needs to be in template: {% csrf_token %}
};
$.ajax({
method: 'post',
url: 'url_to_view', // put your url here
data: data,
beforeSend: function(){
$('#ajaxSendingDiv').fadeIn().attr({'reload':1});
},
success: function(data){
console.log(data);
if (data['status']){
$('#previous_km').val(data['previous_km']);
// do thing
}else{
alert(data['msg']);
};
},
error: function(event,xhr,settings,errorText){
//xhr.status general meanings:
// 0 = Server didn't Reply (server down)
// 400 = Bad Request (Syntax Error)
// 403 = Forbidden (Login Token Expired)
// 403 = Not Found (Invalid Url)
// 500 = Server Error (Django Crash)
},
});
});
};
View.oy (общий)
def GetPrevKM(request):
if request.method == 'POST':
data = {'status':False}
# do your query + return the data..
# I'm not 100% on how your models are set up
# but this is the general format
obj = Fuel.objects.filter(pk=request.POST.get('vehicle_pk'))
if obj:
data['status'] = True
data['previous_km'] = obj.previous_km
data['progressive_km'] = obj.progressive_km
data['msg'] = 'Returned Fuel Information'
else:
data['msg'] = 'No Fuel found on row: {0}'.format(request.POST.get('vehicle_pk'))
import json
return HttpResponse(
json.dumps(data),
content_type="application/json"
)
# Post only View!
from django.http import Http404
raise Http404
И я рекомендую попробовать использовать JQuery больше, вы можете получить гораздо больше работы быстрее (имо), и кажется, что многие люди используют его для таких вещей