DJANGO - Попытка установить зависимый выпадающий список
Как вы понимаете, я новичок в кулинарии, но я не могу найти, где мой код ошибочен. Бьюсь уже целый день, заменяя и переименовывая различные файлы. Возможно, некоторые свежие глаза заметят ошибку, которую я совершил. Что-то в моем коде не создает "проблемных зон".
Что я хочу сделать. Когда вы в рабочем заказе выбираете продукт, ограничивает ли это области проблем, которые вы можете определить.
-----models.py------
class Products(models.Model):
m_product_short=models.CharField(unique=True,max_length=5)
m_product_long=models.CharField(max_length=40)
def __str__(self):
return self.m_product_short
class IssueAreas(models.Model):
product=models.ForeignKey(Products, on_delete=models.SET_NULL, null=True)
m_issue=models.CharField(max_length=50)
def __str__(self):
return self.m_issue
class WorkOrder_main(models.Model):
wo_machine_product = models.ForeignKey(Products, on_delete=models.SET_NULL, null=True)
wo_issue_area = models.ForeignKey(IssueAreas,on_delete=models.SET_NULL, null=True)
----url.py-----
urlpatterns = [
path("create/",views.WO_CreateView.as_view(), name="Create Order"),
path('ajax/loadIssue/', views.loadIssueAreas, name='ajax_loadIssueAreas'), # AJAX
]
----views.py-----
class WO_CreateView(CreateView):
template_name = 'WorkOrderCreate.html'
model = WorkOrder_main
form_class = WorkOrder_Add2
# AJAX
def loadIssueAreas(request):
product_id = request.GET.get('wo_machine_product')
issues = IssueAreas.objects.filter(product_id=product_id).all()
return render(request, 'oa/IssueAreaDropDown.html', {'issues': issues})
----forms.py-----
class WorkOrder_Add2(forms.ModelForm):
class Meta:
model=WorkOrder_main
fields= ' __all__ '
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['wo_issue_area'].queryset = IssueAreas.objects.none()
if 'product' in self.data:
try:
product_id = int(self.data.get('product'))
self.fields['wo_issue_area'].queryset =IssueAreas.objects.filter(product_id=product_id).order_by('id')
except (ValueError, TypeError):
pass
elif self.instance.pk:
self.fields['wo_issue_area'].queryset = self.instance.product.IssueAreas_set.order_by('id')
----WorkOrderCreate.html----
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
{% extends "Master.html" %}
{% block title %}Create{% endblock %}
{% block content %}
<h1>Create Order</h1>
<form method="post" id="IssueForm" data-issues-url=" oa/ajax/loadIssue/" novalidate>
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save</button>
</form>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
$("#id_wo_machine_product").change(function () {
const url = $("#IssueForm").attr("data-issues-url");
const productID = $(this).val();
$.ajax({
url: url,
data: {
'product': productID
},
success: function (data) {
$("#id_wo_issue_area").html(data);
}
});
});
</script>
{% endblock %}
---- IssueAreaDropDwon.html----
<option value="">---------</option>
{% for issue in issues %}
<option value="{{ issuearea.pk }}">{{ issuearea.m_issue }}</option>
{% endfor %}