Django 관리자에서 다른 선택 태그의 옵션에 따라 선택 태그 옵션을 변경하는 방법은 무엇입니까?

메르 단 차리 야 로프

나는 이것을 admin.py에 가지고 있습니다.

class BrandAdmin(admin.ModelAdmin):
    list_display = ('name','category','date')
    form = BrandAdminForm
    class Media:
        js = ('own.js',)

admin.site.register(Brand,BrandAdmin)

및 models.py

class Category(models.Model):
    name = models.CharField(max_length=100)

class Subcategory(models.Model):
    name = models.CharField(max_length=100)
    category = models.Foreignkey(Category, on_delete=models.CASCADE)

class Brand(models.Model):
    name = models.CharField(max_length=100)
    category = models.Foreignkey(Category, on_delete=models.CASCADE)
    subcategory = models.Foreignkey(Subcategory, on_delete=models.CASCADE)
    date = models.DateTimeField()

카테고리에 따라 브랜드 하위 카테고리를 선택하려면 어떻게해야합니까?

아니
...
import json
...

class BrandAdminForm(forms.ModelForm):
    ''' collecting subcategories and corvert it to json. for use in javascript code '''
    data = {}
    for cat in Category.objects.all():
        data[str(cat.id)]={}
    for sub in Subcategory.objects.all():
        data[str(sub.category.id)][str(sub.id)] = {
                'id': str(sub.id),
                'cat_id': str(sub.category.id),
                'name': str(sub.name)
        }
    data = json.dumps(data)
    ''' converted to json '''

    category = forms.ModelChoiceField(queryset=Category.objects.all(), 
    widget=forms.Select(attrs={'onchange':  'category = this.options[this.selectedIndex].value; var data = ' + data + ';(function(){ var select = document.getElementById("id_subcategory");  select.options.length=0; select.options[select.options.length] = new Option("----",""); for(let [key, value] of Object.entries(data[category.toString()])) { select.options[select.options.length] = new Option(value.ady,value.id); } })()'}));
    class Meta:
        model = Brand
        fields='__all__'


class BrandAdmin(admin.ModelAdmin):
    list_display = ('name','category','date')
    form = BrandAdminForm
    # class Media:
    #     js = ('own.js',)

admin.site.register(Brand,BrandAdmin)

django-form과 일부 자바 스크립트 코드가 필요한 모든 코드를 복사하십시오.

widget = forms.Select(attrs={
    'onchange': 'category = this.options[this.selectedIndex].value;   #category on changed
     var data = ' + data + ';(function(){ 
     var select=document.getElementById("id_subcategory"); 
     select.options.length=0; 
     select.options[select.options.length] = new Option("----",""); 
     for(let [key, value] of Object.entries(data[category.toString()])) { 
        select.options[select.options.length] = new Option(value.ady,value.id); 

}}) () '}));

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관