Stack Overflow на русском Asked on February 3, 2021
Всем привет. Есть три модели:
Catalog
в котором есть "Каталог автошин", "Каталог автодисков" и т.д.Manufactures
(производители) внутри которого "bosch", "michelin" "motador" и т.д.Product
у которого ForeignKey
и на Catalog
и наManufactures
.Задача:
Через продукты отфильтровать производителей по каталогам.
То есть если "bosch" и "michelin" относятся к дискам то передать их в "Каталог автодисков".
from django.db import models
class Catalogs(models.Model):
class Meta():
verbose_name = 'Каталог'
verbose_name_plural = 'Каталоги'
catalog_name = models.CharField(max_length=40, verbose_name='Название каталога', blank=False)
catalog_image = models.ImageField(upload_to='catalog_images', verbose_name='Картинка каталога')
# ...
class Manufactures(models.Model):
class Meta():
verbose_name = 'Производитель'
verbose_name_plural = 'Производители'
manufacture_name = models.CharField(max_length=30, verbose_name='Название производителя', blank=False)
# ...
class Product(models.Model):
class Meta():
verbose_name = 'Шина'
verbose_name_plural = 'Шины'
tire_image = models.ImageField(blank=False, upload_to='tire_images', verbose_name='Картинка продукта')
tire_name = models.CharField(max_length=60, verbose_name= 'Название продукта', blank=False)
tire_manufacturer = models.CharField(max_length=30, verbose_name='Производитель:', blank=False)
tire_size = models.FloatField(verbose_name='Размер', blank=False)
tire_load = models.CharField(verbose_name='Нагрузка', blank=False, max_length=12)
tire_price = models.FloatField(verbose_name='Цена', blank=False)
connect_manufacture = models.ForeignKey(Manufactures, verbose_name='Выберите производителя')
connect_catalog = models.ForeignKey(Catalogs, verbose_name='Выберите каталог')
Помогите решить задачу.
# Достаём список уникальных имён всех каталогов
catalog_names = Product.objects.values_list('connect_catalog__catalog_name', flat=True).distinct()
manufactures_by_catalog = {}
# Для каждого имени каталога ищем производителей через `Product`.
for catalog_name in catalog_names:
# Достаём список уникальных производителей из всех продуктов с категорией 'category_name'
manufactures = Product.objects.filter(connect_catalog__catalog_name=catalog_name).values_list('connect_manufacture__manufacture_name', flat=True).distinct()
manufactures_by_catalog[catalog_name] = list(manufactures)
В итоге мы получим dict
где ключи это имена каталогов а значения это список имён производителей.
Answered by NEWME0 on February 3, 2021
Для начала можешь создать форму для отбора в forms.py, потом во view.py делаешь функцию которая будет ловить запрос по этой форме и отдавать нужные категории. Если хоть немножко рубишь в JS то можно сделать без форм и отдавать то что тебе надо через самодельное API, тут уже как угодно делай, либо отдавай сразу отрендеренный HTML, либо JSON готовь и уже JS-ом его отображай.
Answered by Sergei Malanin on February 3, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP