首页 > 解决方案 > Ajax 查询以在 django admin 中获取下拉项目

问题描述

我正在尝试根据课程模型中选择的类别填充一个多对多字段的子类别。这是我之前提出的另一个问题的延续。[https://stackoverflow.com/questions/66673747/selecting-many-to-many-fields-based-on-selected-foreign-key-drop-down-在-django][1]

我已经尝试了下面的表单、视图、url 并添加了一个 js 函数来过滤子类别并将它们填充到表单中。但是我的 js 函数不起作用。请让我知道我要去哪里拧。

#forms.py
class CoursesForm(forms.ModelForm):
    subcategory = forms.ModelMultipleChoiceField(queryset=Subjectsubcategories.objects.none()) 
    # subcategory = [(c.color, c.color) for c in Subjectsubcategories.objects.filter(category= self.category)]

    class Meta:
        model= Courses
        fields='__all__'
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['subcategory'].queryset = Subjectsubcategories.objects.none()

        if 'category' in self.data:
            try:
                category_id = int(self.data.get('category'))
                self.fields['subcategory'].queryset = Subjectsubcategories.objects.filter(category=category_id)
            except (ValueError, TypeError):
                pass
        elif self.instance.pk:
            self.fields['subcategory'].queryset = self.instance.category.subcategory_set.order_by('subcategoryname')

#views.py
def get_subcategories(request):
    #sub_dict={}
    if request.is_ajax() and request.method=='POST':
        category_id= request.GET.get('category')
        print(category_id)
        # category= Subjectcategories.objects.get(id=category_id).first()
        subcategories= Subjectsubcategories.objects.filter(category=category_id)
        return JsonResponse({'subcategory':subcategories})

#urls.py
urlpatterns = [
    url(r'^ajax_get_subcategories/$', views.get_subcategories, name='ajax_get_subcategories'),
]


#sub_cats.js
(function($) {
  $(function() {
      $('#id_category').change(function(e){
        alert("test")
        e.preventDefault();
        var category = $(this).serialize() 

         $.ajax({
            type : 'POST',
            url :  "{% url 'ajax_get_subcategories' %}",
              data : {
                'category_id': category, 
              },
            success : function(data){
            $("#id_subcategory").html(`<tr> </tr>`)},
            error : function(response){
              alert(response["responseJSON"]["error"]);
            }
          
        });
        
          });
      });

})(django.jQuery);


#admin

class Media:
        js= ('admin/js/jquery-3.5.1.min.js','admin/sub_cats.js')

标签: javascriptjquerydjangoajaxdjango-views

解决方案


推荐阅读