Как заставить отображаться сообщение шаблона Django при выборе значения из выпадающего списка, которое соответствует условию в родительской таблице?
У меня есть форма, составляющие поля которой являются внешними ключами к соответствующим родительским моделям, как показано ниже:
class vehicle(models.Model):
STATUS = [
(OPERATIONAL, ('Operational')),
(GROUNDED, ('Grounded')),
(NA, ('Not Applicable')),
]
reg no = models.CharField(max_length=100, null=True)
operationalstatus = models.CharField (max_length=100, choices=STATUS, null=True)
##### child model##
class managecar(models.Model):
reg_no = models.ForeignKey(vehicle, on_delete=models.CASCADE, null = True) location = models.CharField(max_length=100, null=True)
####forms.py####
class manageForm(forms.ModelForm):
class Meta:
model = managecar
fields = '__all__'
Я создал представление, как показано ниже, и связал с ним url, который будет вызываться ajax на фронтенде, чтобы вызвать сообщение, если автомобиль, выбранный в форме, "заземлен", но он возвращает 404 в консоли, в то время как я ожидаю, что он вернет сообщение о том, что автомобиль заземлен, если я выберу автомобиль, который указан заземленным в родительской модели.
views.py
def validate_operation_status(request):
grounded = request.GET.get('grounded', None)
data = {
'is_grounded': vehicle.objects.filter(operational_status__iexact='grounded').exists()
}
return JsonResponse(data)
ajax-метод
$("#id_registration_no").change(function () {
console.log( $(this).val() );
$.ajax({
url: 'ajax/validate-status/',
data: {
'grounded': id_registration_no
},
dataType: 'json',
success: function (data) {
if (data.is_grounded) {
alert("This vehicle is grounded.");
}
}
});
});
Буду благодарен, если меня направят в нужное русло или укажут, где я не справляюсь.
Заранее благодарю
Во-первых, ваша фильтрация просмотров была неправильной, вы не отфильтровали, какой регистрационный номер вы ищете, я думаю, что это должно быть :
Код AJAX : (я изменил имя вашей переменной)
$("#id_registration_no").change(function () {
console.log( $(this).val() );
$.ajax({
url: 'ajax/validate-status/',
data: {
'registration_no': id_registration_no
},
dataType: 'json',
success: function (data) {
if (data.operational_status== 'Grounded') {
alert("This vehicle is grounded.");
}
}
});
});
views.py :
def validate_operation_status(request):
context={}
registration_no = request.GET.get('registration_no', None)
try:
chck_tbl = vehicle.objects.get(reg_no=registration_no)
context.update({'operational_status':chck_tbl.operationalstatus})
except:
context.update({'operational_status':''})
return JsonResponse(data=context)
Если это не работает, пожалуйста, попробуйте проверить, правильно ли вы передаете/вы можете передать значение в ваш views.py, если да, то проверьте теперь, были ли данные, которые вы передаете из views в ajax, также правильными.