나는 이것을 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] 삭제
몇 마디 만하겠습니다