Как вывести категории соответствующие каталогу?
У меня есть три модели:
class Catalog(models.Model):
name = models.CharField(max_length=255, verbose_name='Название каталога')
slug = models.SlugField(blank=True)
class Category(models.Model):
catalog = models.ForeignKey(Catalog, verbose_name='Каталог', on_delete=models.CASCADE)
name = models.CharField(max_length=255, verbose_name='Название категории')
slug = models.SlugField(blank=True)
class Product(models.Model):
category = models.ForeignKey(Category, verbose_name='Категория', on_delete=models.CASCADE)
title = models.CharField(max_length=255, verbose_name='Наименование')
slug = models.SlugField(blank=True)
Есть Каталог(например "Для мужчин", "Для женщин"), есть категории(например "Для мужчин"-> Брюки, футболки и т.д., "Для женщин"-> Брюки, футболки и т.д.). Как при добавление товара, сделать так чтобы при выборе каталога, категории соответствовали этому каталогу, а не вываливались все существующие категории? Все это должно быть в админке django.
Ответы (1 шт):
Один из вариантов:
создаешь форму, которая принимает параметром текущий каталог
class EditProductForm(forms.ModelForm):
class Meta:
model = Product
fields = '__all__'
def __init__(self, *args, **kwargs):
edit_catalog = kwargs.pop("catalog", None)
super().__init__(*args, **kwargs)
self.fields['category'].queryset = Category.objects.filter(catalog=edit_catalog)
И во view создаешь ее. У тебя view для добавления товара должна получать id каталога.
def edit_product_view(request, id_catalog):
catalog = Catalog.objects.get(pk=id_catalog)
form = EditProductForm(request.POST or None, catalog=catalog)
if request.POST:
if form.is_valid():
form.save()
HttpResponseRedirect('...')
return render("template_name.html", {'form': form})
ну и не забываешь добавить urlconfig до этой страницы с параметром id_catalog
urlpatterns += [
...
path(r'edit-product/catalog-<int:id_catalog>/', edit_product_view, name='edit-product'),
...
]
либо можно при в форму редактирования товара добавить еще один селект для выбора каталога. И с помощью django_select2 организовать зависимые(dependent_fields в django_select2) селекты. Когда значения для одного из селектов подбираются на основании других полей формы