@Andre_96

Как сформировать в админке перечень подкаталогов в зависимости от выбранного каталога?

Добрый день. Исходные данные: имеется интернет-магазин продуктов. Структура магазина такова, что имеется каталог продуктов, подкаталог продуктов и затем сами продукты. На странице администратора имеется возможность добавлять категории, подкаталоги и сами продукты. Вопрос следующий: при добавлении какого-либо продукта необходимо выбрать категорию продукта, а затем выбрать подкатегорию, но перечень подкатегорий должен быть сформирован только из тех, которые принадлежат уже выбранной категории. Всё это нужно сделать без модуля form и соответственно не используя поле ModelChoiceField. Думал может как-то через параметр choice, но пока не выходит. Скриншот прикладываю. На изображении видно, что выбрать можно и подкатегорию "Картофель", который относится к категории "Овощи" , а не "Фрукты". 65019dfa2bbfc772331660.jpeg

КОД:
models.py

from django.db import models
from django.urls import reverse

class Category(models.Model):
category_name = models.CharField(max_length=100, verbose_name='Категория')
category_slug = models.SlugField(max_length=100, unique=True, verbose_name='URL')
category_image = models.ImageField(upload_to='category/%Y/%m/%d', blank=True, verbose_name='Фотография')

class Meta:
ordering = ('category_name',)
verbose_name = 'Категория'
verbose_name_plural = 'Категории'

def __str__(self):
return self.category_name

class Subcategory(models.Model):
subcategory_name = models.CharField(max_length=100, verbose_name='Подкатегория')
subcategory_slug = models.SlugField(max_length=100, unique=True, verbose_name='URL')
subcategory_image = models.ImageField(upload_to='subcategory/%Y/%m/%d', blank=True, verbose_name='Фотография')
cat_sub = models.ForeignKey('Category', on_delete=models.CASCADE, verbose_name='Категория')

class Meta:
ordering = ('subcategory_name',)
verbose_name = 'Подкатегория'
verbose_name_plural = 'Подкатегории'

def __str__(self):
return self.subcategory_name

class Product(models.Model):
print (Subcategory.objects.all())
product_name = models.CharField(max_length=100, verbose_name='Продукт')
product_slug = models.SlugField(max_length=100, verbose_name='URL')
product_image = models.ImageField(upload_to='product/%Y/%m/%d', blank=True, verbose_name='Фотография')
price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='Цена')
cat_prod = models.ForeignKey('Subcategory', on_delete=models.CASCADE, verbose_name='Подкатегория')

class Meta:
ordering = ('product_name',)
verbose_name = 'Товар'
verbose_name_plural = 'Товары'

def __str__(self):
return self.product_name

admin.py

from django.contrib import admin
from .models import *

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = ['id', 'category_name', 'category_slug', 'category_image']
prepopulated_fields = {'category_slug': ('category_name',)}

@admin.register(Subcategory)
class SubcategoryAdmin(admin.ModelAdmin):
list_display = ['id', 'subcategory_name', 'subcategory_slug', 'subcategory_image', 'cat_sub']
prepopulated_fields = {'subcategory_slug': ('subcategory_name',)}

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = ['id', 'product_name', 'product_slug', 'product_image', 'price', 'cat_prod']
prepopulated_fields = {'product_slug': ('product_name',)}

Заранее благодарю.
  • Вопрос задан
  • 27 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы