у меня есть 3 модели: Category
, SubCategory
и Product
.
SubCategory
относится к Category
с Foreignkey
, а Product
относится к Category
и Subcategory
через ForeignKey
.
What My Db looks like:
Category: Kids
-->SubCategory: Beanies
Category: Men
-->SubCategory: Hoodies
Теперь, когда я хочу добавить продукт и выбираю Kids
, на странице администрирования Product
я хочу, чтобы отображались только связанные подкатегории.
Что я пробовал:
используя formfield_for_foreignkey
, но я не могу понять, как это работает.
Я сталкивался с этим вопросом Администратор Django Показать / скрыть поля, если в раскрывающемся списке выбрано конкретное значение , но я думаю, что это больше связано с полем, чем со значением.
Предложения, которые я нашел онлайн:
- используйте ajax для извлечения подкатегорий и вставьте их в дочернее поле.
Мои модели:
class Category(models.Model):
name = models.CharField(max_length=250, db_index=True, unique=True)
slug = models.SlugField(max_length=250, db_index=True, unique=True)
class SubCategory(models.Model):
parent = models.ForeignKey(Category, on_delete=models.CASCADE)
name = models.CharField(max_length=250, db_index=True)
slug = models.SlugField(max_length=250, db_index=True)
class Product(models.Model):
parent = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="category")
child = models.ForeignKey(SubCategory, on_delete=models.CASCADE)
name = models.CharField(max_length=250, unique=True, db_index=True)
slug = models.SlugField(max_length=250, unique=True, db_index=True)
Мои модели администратора:
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = [
'name', 'slug'
]
@admin.register(SubCategory)
class SubCategoryAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug':('name',)}
list_display = [
'name', 'slug', 'parent',
]
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = [
'name', 'slug', 'child',
]
prepopulated_fields = {'slug':('name',)}
list_per_page = 20
class Media:
js = ('javascript/hide_child_if_parent_is_none.js', )