Зависимые выпадающие списки
У меня есть 2 зависимых выпадающих списка, при изменении значения в первом списке, изменяются варианты выбора во втором списке. Я добавил в первичный выпадающий список значение по умолчанию, смысл в том, чтобы оно бралось из профиля пользователя. Но вторичный список на странице остается пустым, пока я не передерну первичный переключатель. Мне нужно видоизменить мой js файл, как это правильно сделать?
Для реализации я использовал статью.
load_gpu.js
$("#id_id_cs").change(function () {
let url = $("#groupForm").attr("data-list-gpu-url"); // get the url of the `load_g_p_u` view
let csId = $(this).val(); // get the selected cs ID from the HTML input
$.ajax({ // initialize an AJAX request
url: url, // set the url of the request (= localhost:8000/main/ajax/load-g-p-unit/)
data: {
'id_cs': csId // add the id_cs id to the GET parameters
},
success: function (data) { // `data` is the return of the `load_gpu` view function
$("#id_id_gpu").html(data); // replace the contents of the city input with the data that came from the server
}
});
});
views.py
def load_gpu(request):
id_cs = request.GET.get('id_cs')
list_gpu = GPU.objects.filter(id_cs=id_cs).order_by('name_gpu')
return render(request, 'main/gpu_dropdown_list_options.html', {'list_gpu': list_gpu})
class GroupCreateView(CreateView):
template_name = 'main/group.html'
model = Group
form_class = GroupForm
success_url = reverse_lazy('start')
def get(self, request, id_group=None, *args, **kwargs):
# form = self.form_class(initial=self.initial)
id_current_cs = request.user.profile.id_cs
form = self.form_class(initial={'id_cs': id_current_cs})
context = {
'form': form,
}
print('id_current_cs = ', id_current_cs)
return render(request, self.template_name, context)
def post(self, request, id_group=None, *args, **kwargs):
error = ''
if request.method == 'POST':
form = GroupForm(request.POST)
if request.POST.get('save') and form.is_valid():
just_created = form.save(commit=False)
just_created.Create_User = request.user
just_created.id_filial = request.user.profile.id_filial
just_created.id_cs = request.user.profile.id_cs
just_created.save()
return HttpResponseRedirect(reverse('main:edit_work', args=(just_created.id_group,)))
else:
error = 'Форма заполнена некорректно'
form = GroupForm()
context = {
'title': 'Группа работ',
'form': form,
'error': error,
}
return render(request, 'main/group.html', context)
urls.py
urlpatterns = [
path('ajax/load-g-p-u/', views.load_gpu, name='ajax_load_g_p_u'),
]
models.py
class CS(models.Model):
id_cs = models.AutoField(primary_key=True)
name_cs = models.CharField(max_length=256)
id_filial = models.ForeignKey('Filial', models.DO_NOTHING, blank=True, null=True)
def __str__(self):
return self.name_cs
class GPU(models.Model):
id_gpu = models.AutoField(primary_key=True)
name_gpu = models.CharField(max_length=256)
id_cs = models.ForeignKey('CS', models.DO_NOTHING, blank=True, null=True)
def __str__(self):
return self.name_gpu
class Group(models.Model):
id_group = models.AutoField(primary_key=True)
id_filial = models.ForeignKey('Filial', models.DO_NOTHING, related_name='filial')
id_cs = GroupedForeignKey(CS, "id_filial", on_delete=models.SET_NULL, null=True, related_name='cs')
id_gpu = GroupedForeignKey(GPU, "id_cs", on_delete=models.SET_NULL, null=True, related_name='gpu')
name_group = models.CharField(max_length=256)
short_description = models.CharField(max_length=256)
creation_date = models.DateTimeField(auto_now=True, blank=True, null=True)
start_date = models.DateField(auto_now=False, blank=True, null=True)
end_date = models.DateField(auto_now=False, blank=True, null=True)
Create_User = models.CharField(max_length=256, blank=True, null=True)
def __str__(self):
return self.name_group