Для реализации связанных выпадающих списков в админке Django можно использовать JavaScript, чтобы фильтровать подкатегории на основе выбранной категории.
1. Создайте шаблон JavaScript, который будет выполнять AJAX-запрос для получения подкатегорий на основе выбранной категории. Например, создайте файл `subcategory_ajax.js` со следующим содержимым:
```javascript
(function($) {
$(document).ready(function() {
// При изменении значения поля категории
$('#id_category').change(function() {
var categoryId = $(this).val(); // Получаем выбранное значение категории
var url = '/get_subcategories/' + categoryId + '/'; // URL-адрес для AJAX-запроса
// Выполняем AJAX-запрос
$.ajax({
url: url,
type: 'GET',
dataType: 'json',
success: function(data) {
// Очищаем список подкатегорий
$('#id_subcategory').empty();
// Добавляем полученные подкатегории в список
$.each(data, function(index, subcategory) {
var option = $('<option>').val(subcategory.id).text(subcategory.name);
$('#id_subcategory').append(option);
});
}
});
});
});
})(django.jQuery);
```
2. Создайте URL-шаблон, который будет использоваться для получения подкатегорий по выбранной категории. Например, добавьте следующий URL-шаблон в файл `urls.py`:
```python
from django.urls import path
from . import views
urlpatterns = [
# ...
path('get_subcategories/<int:category_id>/', views.get_subcategories, name='get_subcategories'),
# ...
]
```
3. Создайте представление `get_subcategories`, которое будет возвращать JSON-ответ с подкатегориями на основе выбранной категории. Например, в файле `views.py`:
```python
from django.http import JsonResponse
from .models import SubCategory
def get_subcategories(request, category_id):
# Получаем подкатегории для выбранной категории
subcategories = SubCategory.objects.filter(category_id=category_id).values('id', 'name')
return JsonResponse(list(subcategories), safe=False)
```
4. В административной панели Django зарегистрируйте модель `Products` и задайте форму с поддержкой JavaScript. Например, в файле `admin.py`:
```python
from django.contrib import admin
from django.forms import ModelForm, widgets
from .models import Products
class ProductsForm(ModelForm):
class Meta:
model = Products
exclude = []
widgets = {
'subcategory': widgets.Select(attrs={'class': 'subcategory-select'}),
}
@admin.register(Products)
class ProductsAdmin(admin.ModelAdmin):
form = ProductsForm
class Media:
js = ('subcategory_ajax.js',)
```
Теперь, при создании или редактировании продукта в админке Django, когда пользователь выбирает категорию в поле "category", в поле "subcategory" будут отображаться только подкатегории, относящиеся к выбранной категории.