Django добавляет товары в категории с одинаковыми названиями
и я пытаюсь добавить товары в категории с тем же именем Например, это мои модели.
models.py
class Category(models.Model):
headline = models.CharField(max_length=150)
parent_category = models.ForeignKey('self', on_delete=models.CASCADE, related_name='children', null=True, blank=True)
class Product(models.Model):
headline = models.CharField(max_length=150)
category = models.ManyToManyField(Category, related_name = 'products')
views.py
#For Example I have Main Category Technic. that has 2 child categories (Mobile Phones and SmartPhones) and both have category Phone with same name See the Tree:
#Technic -> Mobile Phones -> Phone AND Technic -> SmartPhones -> Phone
Technic -> Мобильные телефоны -> Телефон - Содержит 4 продукта Technic -> SmartPhones -> Phone - Содержит 0 продуктов
Все, что я пытаюсь сделать, это проверить, если самая маленькая (дочерняя) категория имеет такое же имя, взять ее продукты и переместить в другую категорию телефонов в этой позиции
# Желаемый результат -> Technic -> Мобильные телефоны -> Телефон - Содержит 4 товара ( одинаковые товары ) Technic -> SmartPhones -> Phone - Содержит 4 товара (одинаковые товары), потому что оба последних дочерних имени кошек одинаковы.
Сначала необходимо определить, когда категория является младшим ребенком. Например, проверить, что не существует родительской категории. Затем получите набор категорий с одинаковым заголовком и, перебирая категории с наименьшим потомком, добавьте все категории с одинаковым заголовком к каждому товару.
for category in lowest_child_categories:
# only if category has no parent
if not category.parent_category_set.all().exists():
# get all categories with same headline
same_headlines = Categories.objects.filter(headline=category.headline)
# for each associated product, add all other categories to product
for product in category.products.all():
for other_category in same_headlines:
# only if no parent category exists
if not other_category.parent_category_set.all().exists():
# this will not duplicate association if already exists
product.category.add(other_category)
В этом примере будет выполняться несколько лишних операций. Вы можете дополнительно настроить алгоритм для повышения производительности.